Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > DLL_PROCESS_DETACH


Автор: _hunter 29.1.2004, 23:49
я из вот такой dll:
Код
extern "C" void __export AutoProc();
//-------------------------------------------------------------------------

void AutoProc(){
//}
//-------------------------------------------------------------------------

#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hInstance, DWORD reason, LPVOID Reserved){
 if ( reason == DLL_PROCESS_DETACH ){
   MessageBox( NULL, "DLLMain", "", MB_OK);
 }
}
//-------------------------------------------------------------------------

хук цепляю:
Код
 DLL_Handle = LoadLibrary("dll.dll");
 if (DLL_Handle != NULL){
   HOOKPROC AutoProc;
   AutoProc = (HOOKPROC)GetProcAddress(DLL_Handle, "_AutoProc");
   if (AutoProc != NULL)
     DLL_Hook = SetWindowsHookEx(WH_CALLWNDPROC, AutoProc, DLL_Handle, 0);
 }

по идее при закрытии сервера я должен получить один MessageBox, а получаю два

почему? confused.gif

Заранее благодарю за ответ.

Автор: Fantasist 30.1.2004, 00:44
Цитата
по идее при закрытии сервера я должен получить один MessageBox, а получаю два

почему?


Повезло, что получаешь два - по видимому запускаешь в отладке, а значит, как минимум подсоеденяются/отсоеденяются два процесса - отладчик и твоя программа. Но вообще-то такая длл-ка будет загруженна во все процессы при установке хука. Вставть такой код:

Код

 if ( reason == DLL_PROCESS_DETACH ){
      char lpc[455];
      GetModuleFileName(GetModuleHandle(0),lpc,455);

      MessageBox( NULL, lpc, "DLLMain",  MB_OK);
 }


И понаблюдай. Главное, оставь промежуток времени между SetHook... и Unhook.... побольше.

Автор: _hunter 30.1.2004, 10:25
упс... дейсвительно на все приложения лезет.
спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)