C# 64位 程序 如何 動態載入(讀取) C++ 開發的 32位 DLL?


所謂動態載入,就是運行時,使用到 kernel32.dll 中的 LoadLibrary() 去載入 32 位的 DLL。

問題來了,在64位 WIN 環境下,Windows\System32\Kernel32.dll 是 64位 !!!!真正的 32位 kernel32.dll 在 Windows\SysWOW64\ 下,按原來 Windows 的思路,Windows\System 放的是16位 DLL,System32放的是32位DLL,那么64位系統DLL,就應該放到 System64下啊!!!你說這些阿三干的是啥?所以,就會發生 64位 C# 程序使用 Windows\System32\kernel32.dll 中的 LoadLibrary() 時,載入不了 32位 DLL 的情況。

 

解決方法:

首先,最簡單的方法,就是犧牲 C# 64位的特點,把工程輸出 從 AnyCPU 改為 x86。這樣就是一路32位了(其實就變成 32位 C#程序 動態調用 32位 C++ DLL了)。

其次,有人提出一個方法就是 做一個 ATL COM 的封裝服務EXE,用那個去 載入 32位的DLL,待嘗試。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM