Всем привет.
Я пробую использовать exe программу как динамически загружаемую библиотеку. Функции экспортируются/импортируются нормально, но точка входа "dllmain" не хочет отрабатывать. Иду в обход mainCRTStartup — не помогает. Вот мой код который грузит сам себя:
#include <windows.h>
#pragma comment(linker, "/ENTRY:entry")
extern "C" int mainCRTStartup(LPVOID var1, DWORD var2, LPVOID var3);
int entry (LPVOID var1, DWORD var2, LPVOID var3)
{
MessageBoxA(0, "Entry Message", "", MB_OK | MB_ICONINFORMATION);
return mainCRTStartup(var1, var2, var3);
}
typedef void (*exportFuncPtr)();
extern "C" void __declspec(dllexport) exportFunc()
{
MessageBoxA(0, "DLL Message", "", MB_OK | MB_ICONINFORMATION);
}
int main (int argc, char *argv[])
{
MessageBoxA(0, "EXE Message", "", MB_OK | MB_ICONINFORMATION);
exportFuncPtr func;
HINSTANCE lib = LoadLibrary(argv[0]);
if (NULL != lib) {
func = (exportFuncPtr)GetProcAddress(lib, "exportFunc");
if (NULL != func) {
func();
}
FreeLibrary(lib);
}
return 0;
}
VC11
алерты по 1 разу срабатывают, хотя по идее entry второй раз должна вызваться на LoadLibrary. Если внаглую в PE заголовке включить флаг 0x2000, то dllmain таки срабатывает, но сама программа как exe перестает запускаться. Как побороть?
Здравствуйте, segray, Вы писали:
S>Всем привет.
S>Я пробую использовать exe программу как динамически загружаемую библиотеку.
1) Оформить этот dll-exe как out-proc COM-сервер и не париться
2) Вытащить нужный функционал в DLL и юзать из обоих EXE. И тоже не париться