2013-12-18 150 views
0

Rad Studio XE3有一個問題:我的程序(32位)定期在我的機器上運行(Windows 7-64位),但是當我嘗試運行「xp模式「出現以下錯誤消息:」找不到KERNEL32.dll庫中Wow64RevertWow64FsRedirection的入口點「。在Windows XP上運行32位程序

我必須在計算機上運行它,32位,安裝xp。

在此先感謝。

+0

這是我見過最糟糕的一段時​​間。 *關於通用計算硬件和軟件的問題與Stack Overflow無關。*的確如此。但關於爲什麼調用Win32 API函數無法解決的問題非常多。關閉選民,對你感到羞恥! –

回答

2

Wow64RevertWow64FsRedirection函數僅在Win64系統上可用。

最低支持的客戶端 Windows Vista中,Windows XP專業x64版[桌面應用程序僅]

它不是東西,是在Delphi的RTL和VCL任何地方使用,所以它的東西,你的代碼(或您正在使用的第三方組件或庫)正在執行。

爲了使應用程序與32位版本的Windows兼容,您需要將其刪除(以及任何其他64位唯一函數)。

+0

好的謝謝你的回覆。 – user2377071

3

WOW64文件系統重定向僅在WOW64下運行時纔有意義。因此,該函數僅適用於在64位系統上運行的32位進程,即在WOW64下運行。該函數適用於64位進程,但始終失敗(返回FALSE)。該功能在32位系統上不可用。

因此,如果您希望程序在32位操作系統上運行,則不得使用該函數的加載時鏈接。如果你從64位進程調用它,你必須期望它失敗。

如果要禁用文件系統重定向,那麼你應該:

  1. 使用運行時鏈接。這是撥打GetModuleHandle('kernel32')GetProcAddress()
  2. 添加代碼以處理GetProcAddress()可能返回NULL的事實。在這種情況下,您只需跳過禁用文件系統重定向的調用。
  3. 如果進程是64位,跳過調用以禁用文件系統重定向,因爲它們總是失敗。

現在,也有極少數場景中禁用文件系統重定向是合適的。一般來說,根據我的經驗,如果開發人員足夠認識這種情況,那麼他們也足夠了解上面列出的三點。所以,我認爲你的代碼根本不應該禁用文件系統重定向。我想知道是否有更好的解決方案,導致您禁用文件系統重定向

+0

有時候人們會花很多時間爬過牆壁,而不是離開一小段距離 –

相關問題