问题是在不存在请求的功能的旧机器上运行代码。为了检查它,使用LoadLibrary
和GetProcAddress
,如here所示,但GetProcAddress
要求在使用之前在TypeDef
中的功能的地址。
例如,以这两个上例如,Windows XP SP2 32位:带功能指针的TypeDef:功能不存在
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的
这是很容易实现自己的自定义Wow64RevertWow64FsRedirection
与非WINAPI类型定义,但他们怎么能与基类型时设定的功能所取代离子存在于kernel32.dll中?
*但GetProcAddress需要函数的地址* - 这是不正确的。 [GetProcAddress](https://msdn.microsoft.com/en-us/library/windows/desktop/ms683212%28v=vs.85%29.aspx)只需要模块句柄和一个字符串。 – PaulMcKenzie
@保罗:帮帮我吧。看着你的[答](http://forums.codeguru.com/showthread.php?247936-Problem-using-GetProcAddress)的方式:这是否仍然适用? –
'GetProcAddress'返回一个指向函数的指针。调用该函数不需要函数指针(除了字符串名称的指针)。 – PaulMcKenzie