日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

64位进程调用32位dll的解决方法

發(fā)布時間:2023/11/30 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 64位进程调用32位dll的解决方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近做在Windows XP X64,VS2005環(huán)境下做32位程序編譯為64位程序的工作,遇到了一些64位編程中可能遇到的問題:如內(nèi)聯(lián)匯編(解決方法改為C/C++代碼),long類型的變化,最關(guān)鍵的遇到了64位進程需要調(diào)用32位dll的問題。由于有一些32位dll沒有源代碼,無法重新編譯為64位dll,所以只能想辦法解決64位進程調(diào)用32位dll問題,這個問題讓我很是撓頭了幾天。

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

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

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

結(jié)論:以上方法可以解決64位進程調(diào)用32位dll的問題

32位進程調(diào)用64位dll應(yīng)該也可以通過這種方法解決,原因64位windows系統(tǒng)下安裝了32位和64位兩套COM系統(tǒng)

轉(zhuǎn)載于:https://www.cnblogs.com/mazhenyu/archive/2007/06/28/798710.html

總結(jié)

以上是生活随笔為你收集整理的64位进程调用32位dll的解决方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。