这是我的DLL的.cpp文件代码:
#include <windows.h>HHOOK g_hMouse = NULL;
HINSTANCE g_hInst;
LRESULT CALLBACK MouseProc( int nCode, WPARAM wParam, LPARAM lParam)
{
return -1;
}void SetHook()
{
g_hMouse = SetWindowsHookEx(WH_MOUSE, MouseProc, g_hInst, 0);
}BOOL WINAPI DllMain( HINSTANCE hinstDLL,
DWORD fdwReason,
LPVOID lpvReserved)
{
g_hInst = hinstDLL;
}这是我的.def文件:
LIBRARY "Hook"EXPORTS
SetHook @2这是我主对话框的OnInitDialog()
BOOL CHookTestDlg::OnInitDialog()
{
         .....
      // TODO: 在此添加额外的初始化代码
SetHook();
}我怎么编译后点击了.exe文件没有反应啊。但是上面的dll文件中我如果不加DllMain,并且把SetHook()
改为g_hMouse = SetWindowsHookEx(WH_MOUSE, MouseProc, GetModuleHandle(L"Hook"), 0);
却是可以的,为什么呢??

解决方案 »

  1.   

    BOOL WINAPI DllMain( HINSTANCE hinstDLL,
    DWORD fdwReason,
    LPVOID lpvReserved)
    {
    g_hInst = hinstDLL;
    }
    如果fdwReason=DLL_PROCESS_ATTACH,你要返回非0值,否则dll将被立刻卸载
      

  2.   

    BOOL WINAPI DllMain( HINSTANCE hinstDLL,
    DWORD fdwReason,
    LPVOID lpvReserved)
    {
    g_hInst = hinstDLL;
    switch (fdwReason) {
          case DLL_PROCESS_ATTACH:
             // DLL is attaching to the address space of the current process.
             break;      case DLL_THREAD_ATTACH:
             // A new thread is being created in the current process.
             break;      case DLL_THREAD_DETACH:
             // A thread is exiting cleanly.
             break;      case DLL_PROCESS_DETACH:
             // The calling process is detaching the DLL from its address space.
             break;
       }
       return (TRUE);
    }
    我改成上面的语句就OK了。。谢谢楼上,,结贴~~