我正在與團隊成員討論如何將我們的軟件套件從32位轉換爲64位, 64位進程中的32位dll出現了。他提到這是可能的,並且你可以使用32位進程的64位庫做同樣的事情,但除了提及使用inproc服務器或更復雜的「拳擊」之外,沒有詳細介紹它,技術。解釋如何從64位進程訪問32位庫,反之亦然
我確實想知道如何做到這一點以供我自己參考,但我更關心它如何在引擎蓋下實際工作。如何訪問在32位和64位進程之間不可見的內存空間?如前所述,自己也不會因爲知道如何做到這一點而受傷,我通常使用C++/CLI或C#。
我正在與團隊成員討論如何將我們的軟件套件從32位轉換爲64位, 64位進程中的32位dll出現了。他提到這是可能的,並且你可以使用32位進程的64位庫做同樣的事情,但除了提及使用inproc服務器或更復雜的「拳擊」之外,沒有詳細介紹它,技術。解釋如何從64位進程訪問32位庫,反之亦然
我確實想知道如何做到這一點以供我自己參考,但我更關心它如何在引擎蓋下實際工作。如何訪問在32位和64位進程之間不可見的內存空間?如前所述,自己也不會因爲知道如何做到這一點而受傷,我通常使用C++/CLI或C#。
比提不必使用一個inproc服務器其它...
這是不可能的進程,一個64位的過程中不能加載和執行任何32位代碼。如果你對非託管代碼有依賴性,這隻會是一個問題,純.NET代碼總是可以被分解到所需的體系結構。由即時編譯提供的非常好的好東西。
使這種非託管代碼工作的唯一方法是使用32位輔助進程爲代碼提供兼容的home進程。如果將非託管代碼作爲COM服務器提供,則幾乎可以免費獲得此代碼,則可以將其AppId配置爲在代理進程中運行服務器。只需正確設置註冊表項即可。如果沒有,那麼在Platform目標設置爲x86的情況下創建自己的.NET主機應用程序,以便它將作爲32位進程運行。讓他們用.NET過程互操作機制(如WCF,Remoting,命名管道或套接字)相互交談。