Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
skMaster
4 / 4 / 2
Регистрация: 26.02.2013
Сообщений: 39
Завершенные тесты: 1
#1

Запуск DLL в стороннем приложении - C++

17.11.2013, 00:57. Просмотров 417. Ответов 0
Метки нет (Все метки)

Всем доброго времени суток! Пробую создать свою DLL-ку и добавить импорт в сторонне приложение!
Пишу в CodeBlocks. В таблицу импорта добавляю через CFF Explorer. В си++ я не очень шарю, поэтому возникла куча вопросов!
Вот так примерно сейчас выглядит код моей DLL-ки:
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "main.h"
 
using namespace std;
 
bool run = false;
 
DWORD WINAPI PROCESS_ATTACH(LPVOID);
 
extern "C" DLL_EXPORT BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH:
            if (!run) CreateThread (0, 0, PROCESS_ATTACH, 0, 0, 0);
            break;
 
        case DLL_PROCESS_DETACH:
            run = false;
            MessageBoxA(0, "dll выгружена", "test", 0);
            break;
 
        case DLL_THREAD_ATTACH:
            break;
 
        case DLL_THREAD_DETACH:
            break;
    }
    return TRUE;
}
 
DWORD WINAPI PROCESS_ATTACH(LPVOID)
{
    run = true;
    long pid = GetCurrentProcessId();
    MessageBoxA(0, "dll загружена + запущен наш поток", "test", 0);
 
    //ОСНОВНОЙ ПОТОК
 
    ExitThread(0);
    return 0;
}
DLL-ка вроде работает, стороннее приложение ее прикрасно кушает, и выводит меседж боксы при старте и при завершении программы! С потоком тоже вроде всё норм, меседж бокс вываливается и не тормозит поток программы.
Ну и собственно первые вопросы:
1) Как из "ОСНОВНОГО ПОТОКА" получить хоть какието сведения о процессе, который загрузил DLL-ку?
2) Как их вывести допустим в тотже MessageBoxA? (просто для наглядности чтобы было видно что оно работает. с GetCurrentProcessId() чтото ничего неполучается, выводит всякий мусор)
3) Как в DLL-ку добавить форму и вывести ее на экран из "ОСНОВНОГО ПОТОКА"?

Не по теме:

А также интересует:
4) Как на форме в качестве фона установить картинку?
5) Как создать файл ресурсов?
6) Как из файла ресурсов выгрузить на диск EXE-шник и запустить его из "ОСНОВНОГО ПОТОКА"?
7) Как получить HWID данные компьютера в "ОСНОВНОМ ПОТОКЕ"? (номер мамки, ид жестких дисков, версию биоса и прочие.)
8) Как получить список всех загруженных DLL-ок в процессе запустившем моб DLL-ку?
9) Подкиньте плиз инфо по сокетам в С++ (если можно с элементарными примерами) и можно ли будет это затолкать в мою DLL-ку?
10) Как в C++ работать с WMI? (Понятных мне примеров найти несмог) Пните в каком направлении посмотреть))
11) Что почитать про указатели в C++ ???


Сам пишу на VB6. Там проблем с реализацией всех этих вопросов у меня не возникает. Проблемка возникает только с тем что программы написанные НЕ на VB6 отказываются кушать DLL написанные на VB6. Ну и VB6 н дружит с многопоточностью. Вот и решил капнуть в сторону С++.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2013, 00:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запуск DLL в стороннем приложении (C++):

Заменить курсор в стороннем приложении - C++
Есть стороннее win32 приложение, в котором есть свой кастомный курсор. Нужно посредством c++ скрыть этот курсор и отобразить в этом же...

DLL компилируется, но не вызывается в приложении C# - C++
Здравствуйте, есть DLL, компилируется без ошибок, но вызвать из C# её не получается, вот код: #define _CRT_SECURE_NO_WARNINGS ...

Указатели в VC++ (2010) DLL и в приложении C++Builder (RAD XE4) - C++
Здравствуйте! Есть такая ситуация: в приложении происходит вызов функции из библиотеки, в которую надо передать vector<wchar_t*>*. Когда...

Динамическое подключение VC++ (2012) DLL в приложении C++Builder (RAD XE5) - C++
Здравствуйте! Вроде бы подобные темы бывали, но я так и не смог понять, что не так, т.к. редко пишу на с++. Вот код в библиотеке VC++:...

Запуск программы невозможен так как на компьютере отсутствует libgcc-s-sjlj-1.dll. Попробуйте переустановить программу - C++
Программа не запускается. Вывод: "krest_null.exe": Загружено: "C:\scripts\C++\krest_null\Debug\krest_null.exe", Символы загружены. ...

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями? - C++
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете искал 64-битные версии ogg.dll, vorbis.dll...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2013, 00:57
Привет! Вот еще темы с ответами:

Значение DLL_API в стороннем коде - C++
начал ковырять движок "lifeEngine" нашел на гитхабе, но читая наткнулся например на вот это вот: struct DLL_API Gravity{ /******/ ...

Задать размер массива в стороннем файле - C++
В файле записано число, допустим 5, нужно считать его и создать массив такого размера ifstream f("file.txt"); int t; f >> t; ...

Точка входа в процедуру InterlockedCompareExchange64 не найдена в библиотеке DLL KERNEL32.DLL - C++
День добрый! При запуске моей программы (много моего кода + много разных сторонних dll) на WinXP SP2, получаем соответствующую ошибку...

Добавление своей dll в список dll подгружаемых процессом чужого процесса - C++
Вообще вопрос такой,как можно внедрить свою dll в список Import чужого не запущенного процесса?Не изменяя структуры файла.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru