問題是在不存在請求的功能的舊機器上運行代碼。爲了檢查它,使用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