首先,从语法的角度 typedef 用的对不对其次,从功能的角度 这个有用吗本代码出现在 主工程 而不是dll工程,那导出 函数 的定义 是怎么事情BOOL SetHook(BOOL bInstall, DWORD dwThreadId = 0, HWND hWndCaller = NULL)
{
// 定义导出函数的类型
typedef int (WINAPI *PFNSETHOOK)(BOOL, DWORD, HWND);
// 导出函数的DLL文件名。调试时可设置为../10IPPackLib/debug/10IPPackLib.dll
char szDll[] = "10IPPackLib.dll"; // 加载DLL模块
BOOL bNeedFree = FALSE;
HMODULE hModule = ::GetModuleHandle(szDll);
if(hModule == NULL)
{
hModule = ::LoadLibrary(szDll);
bNeedFree = TRUE;
} // 获取SetHook函数的地址
PFNSETHOOK mSetHook = (PFNSETHOOK)::GetProcAddress(hModule, "SetHook");
if(mSetHook == NULL) // 文件不正确?
{
if(bNeedFree)
::FreeLibrary(hModule);
return FALSE;
} // 调用SetHook函数
BOOL bRet = mSetHook(bInstall, dwThreadId, hWndCaller); // 如果卸载,释放上面加载的模块
if(!bInstall)
::FreeLibrary(hModule); return bRet;
}