【发布时间】:2021-08-29 05:28:31
【问题描述】:
我有一个 DLL,我想在其中调用一个函数。我使用 Dependency Walker 检查 DLL,得到的结果是:
void U2U_Test(void)
这是我写的代码,但是GetProcAddress()返回NULL:
typedef void(*U2U_Test_pointer)();
void check() {
HINSTANCE hGetProcIDDLL1 = LoadLibrary(_T("my_dll.dll"));
if (hGetProcIDDLL1 == NULL)
return;
U2U_Test_pointer addr = (U2U_Test_pointer)GetProcAddress(hGetProcIDDLL1, "U2U_Test");
if (addr == NULL)
return;
return addr();
}
【问题讨论】:
-
您会看到解构后的名称。导出的名称应该我弄错了。
-
GetProcAddress不会说谎。您加载的 DLL 中不存在名为U2U_Test的函数。如果您说有,请尽快与 Microsoft 联系,因为这是一个会影响数百万个程序的错误。 -
不相关,但
return addr();在该功能中也没有任何意义。函数是void。那应该只是addr(); -
@S.M.你是对的,我应该使用 ?U2U_Test@@YAXXZ 作为函数名,它解决了问题。
-
@PaulMcKenzie 你是对的,GetProcAddress 不会说谎,但我正在寻找我的错误并在亲爱的 S.M. 的帮助下。我发现了我的错误。
标签: c++ getprocaddress dependency-walker