这是我的def文件:
; WndDll.def : 声明 DLL 的模块参数。LIBRARY WndDllEXPORTS
RunHook @2
StopHook @3这是RunHook定义:
BOOL _stdcall RunHook(HMODULE hModule,DWORD dwThreadId)
{
HWndHook=::SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)HOOKProc,hMod,dwThreadId);
return TRUE;
}这是全局声明:
typedef BOOL (_stdcall *funRunHook)(HMODULE hModule,DWORD dwThreadID);这两种调用都不行:
funRunHook RunHook;
RunHook=(funRunHook)GetProcAddress(hMod,"RunHook");funRunHook RunHook;
RunHook=(funRunHook)GetProcAddress(hMod,MAKEINTRESOURCE(2));
我采用的是VS2008,项目属性:动态库(.dll),MFC使用静态链接!
我分不多,希望大家能不吝赐教啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
; WndDll.def : 声明 DLL 的模块参数。LIBRARY WndDllEXPORTS
RunHook @2
StopHook @3这是RunHook定义:
BOOL _stdcall RunHook(HMODULE hModule,DWORD dwThreadId)
{
HWndHook=::SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)HOOKProc,hMod,dwThreadId);
return TRUE;
}这是全局声明:
typedef BOOL (_stdcall *funRunHook)(HMODULE hModule,DWORD dwThreadID);这两种调用都不行:
funRunHook RunHook;
RunHook=(funRunHook)GetProcAddress(hMod,"RunHook");funRunHook RunHook;
RunHook=(funRunHook)GetProcAddress(hMod,MAKEINTRESOURCE(2));
我采用的是VS2008,项目属性:动态库(.dll),MFC使用静态链接!
我分不多,希望大家能不吝赐教啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
RunHook @2
StopHook @3
改为
LIBRARY "WndDll"EXPORTS
RunHook
StopHook你用序号做什么?序号本来就是为了隐藏导出函数的名字的。一边在用序号,一般说用工具看不到导出函数名字,自相矛盾。
顺便说一下你这么写没错,我这么写运行也没问题。
就刚才我终于找到原因了:
没有加这句extern "C" __declspec(dllexport) BOOL _stdcall RunHook(HMODULE hModule,DWORD dwThreadId);
dumpbin就搜不到函数导出名。
现在问题解决了,不过还是不解的是,如果我要用MAKEINTRESOURCE来返回函数名,应该怎么做?