在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...