【发布时间】:2017-04-18 02:34:12
【问题描述】:
问题是在不存在所请求功能的旧机器上运行代码。要检查它,请使用LoadLibrary 和GetProcAddress,如here 所示,但GetProcAddress 在使用之前需要TypeDef 中的函数地址。
例如,在 XP SP2 32 位上使用这两个:
typedef BOOL (__stdcall *LPFN_Wow64RevertWow64FsRedirection) (PVOID OldValue);
typedef BOOL (__stdcall *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
...
...
LPFN_Wow64RevertWow64FsRedirection wowRevert = NULL;
LPFN_Wow64DisableWow64FsRedirection wowDisable = NULL;
HINSTANCE hLib;
if(GetProcAddresses( &hLib, "kernel32.dll", 2, &wowRevert,_
"Wow64RevertWow64FsRedirection", &wowDisable, Wow64DisableWow64FsRedirection" ))
{...
代码在此处崩溃:
程序入口点 Wow64RevertWow64FsRedirection 在动态链接库 Kernel32.dll 中找不到
使用非 WINAPI 类型定义实现我们自己的自定义Wow64RevertWow64FsRedirection 很容易,但是当函数存在于 kernel32.dll 中时,如何将它们替换为基本类型?
【问题讨论】:
-
但 GetProcAddress 需要函数的地址 -- 这不是真的。 GetProcAddress 只需要模块句柄和一个字符串。
-
@Paul:帮帮我。回头看你的answer:这仍然适用吗?
-
GetProcAddress返回一个指向函数的指针。调用函数不需要函数指针(字符串名称的指针除外)。
标签: c++ function typedef stdcall