我做了一个全局钩子,调试时出现Debug Error:file:chkesp.c……大致是说声明的函数指针调用方式(calling convention)与调用函数的调用方式不同。我左看右看找不到问题,请高手指点!我用的是VC6,Win98.
Dll中:
头文件:
EXPORTMODE BOOL StartHook(HWND hDisWnd);
CPP:
EXPORTMODE BOOL StartHook(HWND hDisWnd)
{
BOOL bResult=false;
if (g_hInstance!=NULL)
{
g_hhook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,g_hInstance,0);
if ((g_hhook!=NULL) && (hDisWnd!=NULL))
{
g_hDisWnd=hDisWnd;
bResult=true;
}
}
return bResult;
}应用程序CPP中:
typedef BOOL (WINAPI *PFNHOOK)(HWND hDisWnd);
PFNHOOK pfnHook;
pfnHook=(PFNHOOK)::GetProcAddress(hModule,(LPCTSTR)"StartHook")
Dll中:
头文件:
EXPORTMODE BOOL StartHook(HWND hDisWnd);
CPP:
EXPORTMODE BOOL StartHook(HWND hDisWnd)
{
BOOL bResult=false;
if (g_hInstance!=NULL)
{
g_hhook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,g_hInstance,0);
if ((g_hhook!=NULL) && (hDisWnd!=NULL))
{
g_hDisWnd=hDisWnd;
bResult=true;
}
}
return bResult;
}应用程序CPP中:
typedef BOOL (WINAPI *PFNHOOK)(HWND hDisWnd);
PFNHOOK pfnHook;
pfnHook=(PFNHOOK)::GetProcAddress(hModule,(LPCTSTR)"StartHook")
__declspec(dllexport) BOOL EventProcess (UINT msg, WPARAM wParam, LPARAM lParam)
dll得编译环境中,把c/c++中的code generation里的call convention选为_cdcel,保证和主程序的设定一样。
如果要用重载函数的话,建议用__cdcel的C++标准,把主程序和DLL的调用约定都设成_cdcel试试看