我知道我讀了所有關於代理過程,我能夠創建一個代理COM,但它可以全部在32位工作或全部工作在64位。我需要從一個64位exe訪問一個32位DLL
什麼是正確的結構?
1)32.DLL < - 64.com < - 64.exe 2)32.DLL < - 32.com < - 64.exe
我嘗試上述兩種的,但我沒有成功調用32.dll?
我知道我讀了所有關於代理過程,我能夠創建一個代理COM,但它可以全部在32位工作或全部工作在64位。我需要從一個64位exe訪問一個32位DLL
什麼是正確的結構?
1)32.DLL < - 64.com < - 64.exe 2)32.DLL < - 32.com < - 64.exe
我嘗試上述兩種的,但我沒有成功調用32.dll?
這是defenetly你想要什麼: 32.DLL < - 32.com < - 64.exe 如果它不工作,表現出更多的細節如何不起作用。另外,如果你沒有打很多電話,你可以通過套接字進行通信(只是一個備份計劃)。
實際上,我只調用一個傳遞文件名的函數,但是dll必須由應用程序域承載,因爲它會創建一個窗口並等待用戶響應。 – 2010-09-23 13:58:18
你是什麼意思的套接字調用。例如,創建一個偵聽端口的com,並在連接時啓動32.dll?也許我可以通過一項服務來達到目的? – 2010-09-23 14:00:23
32.dll < - 32.com < - 64.exe的實際問題是,當我在64.exe中創建com對象時,無法找到它,因爲它被註冊爲32.com,不知何故WOW會將其轉移作爲錯誤:未註冊的類。 – 2010-09-23 14:07:31
我不是太靠中間引入COM對象瞭解你指的是代孕COM,但我已經解決了這個問題(從64位exe文件使用一個32位的DLL):
32.DLL < - > 32bit-out-of-process-com-server.exe < - > 64.exe。
對不起,這可能是你的意思是32.com,不確定,但要確保中間COM對象生活在一個.exe(進程外),而不是在一個DLL。這是出於同樣的原因,您無法將原始32.dll加載到64位進程中。
這就是所謂的外部COM服務器 - 你自己寫了一個單獨的.exe。這是一個很好的解決方案,但需要一些努力。 OP正在詢問一個稍微不同的事情 - 當進行一些調整時,COM運行時會創建一個特殊的進程(稱爲代理)並在其中加載.dll,然後它就像一開始就有一個out-proc COM服務器一樣工作。 – sharptooth 2010-11-09 13:51:12
非常整齊。感謝您抽出寶貴的時間! – 2010-11-09 20:00:26
請參閱[本答案](http://stackoverflow.com/a/12938217/184528),以獲取有關從64位應用程序訪問32位DLL的更全面列表。 – cdiggins 2012-10-17 15:50:31