我用 了这种win32下的接口调用模式,钩子却装不上跟踪时hk一直为空。
是不是必须用def的接口调用才行啊?
下面代码是简单的过程,不知错在哪里,高手请指点
 static HHOOK hk = NULL;
 static HINSTANCE hmod = NULL;extern "C" __declspec(dllexport) LRESULT CALLBACK KeyBoardHook(int nCode, WPARAM wParam, LPARAM lParam) 

     return CallNextHookEx(hk,nCode,wParam,lParam);
}extern "C" __declspec(dllexport) void  installHook()
{
     hk = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyBoardHook,hmod,0);//此句hk一直为空}

解决方案 »

  1.   

    本人是低级错误,请原谅,以下代码送给初学者
    HHOOK hhk = NULL;
    HINSTANCE hins = NULL;BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
     )
    {
        switch (ul_reason_for_call)       {              case DLL_PROCESS_ATTACH:              case DLL_THREAD_ATTACH:              case DLL_THREAD_DETACH:              case DLL_PROCESS_DETACH:                     break;    }       hins=(HINSTANCE)hModule;          //得到DLL实例    return TRUE;
    }//加上进程设定就行了
      

  2.   


    #pragma data_seg("MyHook") 
    static HHOOK hk = NULL;
    static HINSTANCE hmod = NULL;
    #pragma data_seg()
    LRESULT CALLBACK KeyboardProc(          int code,
        WPARAM wParam,
        LPARAM lParam
    )
    {
     return CallNextHookEx(hk,nCode,wParam,lParam);
    }
      

  3.   

    记着把全局的 HINSTANCE 和HHOOK放到共享段中!