我写了一个包含钩子程序的dll。我尝试在加载(成功)dll后调用此函数,但结果为0,GetLastError结果为127.我正在使用visual studio c ++,这是代码:
DLL:
#include <windows.h>
__declspec(dllexport) LRESULT CALLBACK CBTFrenk(int nCode, WPARAM wParam, LPARAM lParam){...}
MyApp的:
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hdll = LoadLibrary((LPCTSTR) L"C:\\Users\.....DllForHook.dll");
wprintf(L"%d\n", GetLastError());
HOOKPROC pfunc = (HOOKPROC)GetProcAddress(hdll, "CBTFrenk");
wprintf(L"%d\n", GetLastError());
HHOOK handleToAHook = SetWindowsHookEx(WH_CBT, pfunc, hdll, 0);
return 0;
}
感谢您的合作。
编辑:
00000000 characteristics
4E515E9D time date stamp Sun Aug 21 21:38:05 2011
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 00011005 ?CBTFrenk@@YGJHIJ@Z = @ILT+0(?CBTFrenk@@YGJHIJ@Z)
Summary
1000 .data
1000 .idata
2000 .rdata
1000 .reloc
1000 .rsrc
4000 .text
10000 .textbss
这是dumpbin的结果,为什么我的函数名称如此奇怪?
编辑:
00000000 characteristics
4E520C85 time date stamp Mon Aug 22 10:00:05 2011
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 0001107D _CBTFrenk@12 = @ILT+120(_CBTFrenk@12)
Summary
1000 .data
1000 .idata
2000 .rdata
1000 .reloc
1000 .rsrc
4000 .text
10000 .textbss
我宣称CBTFrenk像extern“C”,并且称之为“_CBTFrenk @ 12”它的工作。
编辑:
我用代码:: block编写了dll代码,并使用dumpbin我看到导出的函数名是“CBTFrenk @ 12”,如果我尝试调用它,则找不到函数结果。我该如何解决这个问题?
答案 0 :(得分:2)
使用DllForHook库尝试dumpbin以查看是否存在CBTFrenk函数。将CBTFrenk声明为extern“C”以防止C ++名称变形。