64位程序呼叫32位dll的解決方法

2021-07-25 15:13:54 字數 1077 閱讀 4419

在windows7 x64,vs2008環境下做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位co

m伺服器也能與32位客戶端進行通訊。因此,

ll,你可以將它封裝到乙個程序外com伺服器中並在乙個64位程序中用

com配置呼叫dll。

驗證:工作流程:

1.建立乙個程序外com伺服器(exe)。

2.將32位dll的介面函式封裝為com伺服器的相關介面。

3.註冊com伺服器*.exe /regserver 

(登出 *.exe /unregs

erver)。

4.64位程序呼叫32位com伺服器介面,成功。從而曲

線實現了64位程序呼叫32位dll。

具體步驟:

我首先建立了乙個簡單的dll工程,只輸出乙個函式int c = add(int a,int

b); 生成lib和dll

然後建立乙個程序外com(exe型別)

,內部鏈結dll,新增方法method: add(long *c)

編譯生成。

然後註冊com,*.exe /regserver

最建立乙個64位win32工程驗證64位環境下方法呼叫是否正確,經驗證正確!!!

結論:以上方法可以解決64位程序呼叫32位dll的問題

32位程序呼叫64位dll應該也可以通過這種方法解決,原因64位windows系統下安

裝了32位和64位兩套com系統。

64位程序呼叫32位dll的解決方法

最近做在windows xp x64,vs2005環境下做32位程式編譯為64位程式的工作,遇到了一些64位程式設計中可能遇到的問題 如內聯彙編 解決方法改為c c long型別的變化,最關鍵的遇到了64位程序需要呼叫32位dll的問題。由於有一些32位dll沒有源 無法重新編譯為64位dll,所以...

64位程序呼叫32位dll的解決方法

最近做在windows xp x64,vs2005環境下做32位程式編譯為64位程式的工作,遇到了一些64位程式設計中可能遇到的問題 如內聯彙編 解決方法改為c c long型別的變化,最關鍵的遇到了64位程序需要呼叫32位dll的問題。由於有一些32位dll沒有源 無法重新編譯為64位dll,所以...

32位程序注入64位程序

include include define makerex w,r,x,b asm emit 0100 w r x b b define rep asm emit 0xf3 pragma pack 1 typedef struct stubargs stubargs,pstubargs pragm...