Привет, народ. Десять лет как не программировал, и вот на старости лет приспичило. Хочу хук на мышь, глобальный. Собрал dll с хуком, но почему-то при загрузке модуля не вызывается процедура _main. То же самое если я её переименую в initInstance. Код (C++): #include <Windows.h> #include "stdafx.h" #include <iostream> using namespace std; HANDLE dllHandle=0; int _main(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { if (ul_reason_for_call == DLL_PROCESS_ATTACH) { dllHandle = hModule; MessageBox(0, L"INIT DLL MAIN", 0, 0); } return TRUE; } Поскольку хэндл модуля у нас ноль, то и хук не ставится с GetLastError = 1428 Если назвать процедуру BOOL APIENTRY DllMain, то вообще не собирается: Код (Text): Ошибка LNK2005 _DllMain@12 уже определен в Dll1.obj Dll1 C:\Users\user\source\repos\Dll1\Dll1\Dll1.obj Погуглил - вроде пишут что это если MFC библиотека такая ошибка. Но я вроде не создавал MFC проект. Обычная стандартная динамическая библиотека. Как перейти к DllMain? Мне кажется это дложно помочь.
Достал из подвала архива наследие славного q_q, и вставил оттуда #pragma comment(linker, "/ENTRY:main") но все равно не вызывается. Пока сделал workaround : Код (C++): //global var HANDLE dllHandle=0; extern "C" __declspec(dllexport) DWORD InstallHook(HWND hWnd) { if (dllHandle == 0) dllHandle=GetModuleHandle(L"Dll1.dll"); ... ... ... Спм себя за волосы из болота вытащил. Но как-то это неправильно. Должна же вызываться main.
потому что точка входа dll - DllMain Твоя точка входа должна выглядеть так: Код (Text): BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { switch (fdwReason) ... } По поводу руганий компилятора - проект создавай с нуля, а не консольный