привет, у меня следующая проблема, и я не могу понять, что происходит.
код DLL mylib.cpp (mylib.dll):
#include <Windows.h>
#include <tchar.h>
__declspec(dllexport) LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam) {
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserverd){
// Perform actions based on the reason for calling.
switch( fdwReason )
{
case DLL_PROCESS_ATTACH:
// Initialize once for each new process.
// Return FALSE to fail DLL load.
MessageBox(NULL,
_T("DLL Loaded"),
_T("DLL Loaded"),
NULL);
break;
case DLL_THREAD_ATTACH:
// Do thread-specific initialization.
MessageBox(NULL,
_T("DLL Unloaded"),
_T("DLL Unloaded"),
NULL);
break;
}
return TRUE;
}
Код программы my_prog.cpp:
#include <Windows.h>
#include <tchar.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
FARPROC pHookProc;
static HINSTANCE hInstDLL;
hInstDLL = LoadLibrary(_T("mylib.dll"));
pHookProc = GetProcAddress(hInstDLL, "HookProc");
if (!pHookProc) {
MessageBox(NULL,
_T("GetProcAddress failed"),
_T("GetProcAddress failed"),
NULL);
}
return 0;
}
Оба файла компилируются без ошибок. Всякий раз, когда я запускаю my_prog.exe, он выдает сообщение «DLL Loaded», затем сразу же выдает сообщение «DLL unloaded», и в результате происходит GetProcAddress (). Может ли кто-нибудь пролить немного света на меня, пожалуйста. Почему он мгновенно выгружает DLL?
Спасибо всем заранее.
РЕДАКТИРОВАНИЕ:
Я заменил DLL_THREAD_ATTACH на DLL_PROCESS_DETACH, как предложено c-smile . Я проверяю и выполняю экспорт как: long __stdcall HookProc (int, unsigned int, long) (1) (0x00001000). GetProcAddress () по-прежнему не работает. Я получаю "DLL Loaded", GetProcAddress () не удалось, "DLL Unloaded"