64位進程調用32位dll的解決方法


最近做在Windows XP X64,VS2005環境下做32位程序編譯為64位程序的工作,遇到了一些64位編程中可能遇到的問題:如內聯匯編(解決方法改為C/C++代碼),long類型的變化,最關鍵的遇到了64位進程需要調用32位dll的問題。由於有一些32位dll沒有源代碼,無法重新編譯為64位dll,所以只能想辦法解決64位進程調用32位dll問題,這個問題讓我很是撓頭了幾天。

相關資料:
微軟公司的官方網站針對這個問題描述如下:
在64位的windows系統中,一個64位進程不能加載一個32位dll,同理一個32位進程也不能加載一個64位dll。但是,64位windows支持64位和32位進程(包括本機或跨機)間進程間通信(RPC)。在64位windows中,一個進程外32位COM服務器能夠與64位客戶端進行通信,同樣一個進程外64位COM服務器也能與32位客戶端進行通信。因此,如果你有一個32位COM無法識別的DLL,你可以將它封裝到一個進程外COM服務器中並在一個64位進程中用COM配置調用DLL。(最后一句我也看不太懂!!哈哈哈)

驗證:
工作流程:
1.創建一個進程外COM服務器(EXE)。
2.將32位dll的接口函數封裝為COM服務器的相關接口。
3.注冊COM服務器*.exe /regserver  (注銷 *.exe /unregserver)。
4.64位進程調用32位COM服務器接口,成功。從而曲線實現了64位進程調用32位dll。

具體步驟:
我首先創建了一個簡單的dll工程,只輸出一個函數int c = add(int a,int b); 生成lib和dll
然后創建一個進程外COM(EXE類型),內部鏈接dll,添加方法Method: Add(long *c)
{ *c = add(1,2);}編譯生成。
然后注冊COM,*.exe /regserver
最創建一個64位WIN32工程驗證64位環境下方法調用是否正確,經驗證正確!!!

結論:以上方法可以解決64位進程調用32位dll的問題

32位進程調用64位dll應該也可以通過這種方法解決,原因64位windows系統下安裝了32位和64位兩套COM系統

 

https://www.cnblogs.com/mazhenyu/archive/2007/06/28/798710.html


免責聲明!

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



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