[英]Is there any way to load a 32-bit DLL from managed 64-bit code without downgrading the managed code to 32-bit?
[英]Best way to call 32-bit unmanaged code from 64-bit Managed Code using a managed code wrapper
我需要從托管的64位進程調用本機32位代碼的情況越來越頻繁,因為64位計算機和應用程序變得普遍。 我不想將我的applciation標記為32位,我無法獲得正在調用的64位版本的代碼。
我目前使用的解決方案是創建C ++ COM填充程序,這些填充程序在進程外加載以從64位進程進行32位調用。
這個COM填充程序解決方案運行良好,跨進程調用由COM在幕后處理,這最大限度地減少了這種方法的開銷。
但是,我想保留我們使用C#進行的所有新開發,並想知道是否有任何框架可以最大限度地減少執行此操作的開銷。 我看過IPCChannel,但我覺得這種方法並不像COM shim解決方案那樣整潔。
謝謝,艾德
我有同樣的問題,我的解決方案是使用遠程處理 。 基本上該項目包括:
CalculatorRemote.dll
庫
CalculatorNative
內部靜態類,帶有x32 P / Invoke方法 RemoteCalculator
類派生自MarshalByRefObject
,它使用來自CalculatorNative
本機方法; Calculator.dll
),引用CalculatorRemote.dll
,帶有Calculator
類,它私下使用RemoteCalculator
類的singleton來調用需要的x32函數; IpcChannel
從CalculatorRemote.dll
托管RemoteCalculator
以通過Calculator.dll
使用。 因此,如果主應用程序在x64模式下啟動,則會生成RemoteCalculator
主機應用程序並使用遠程RemoteCalculator
實例。 (在x32中它只使用了RemoteCalculator
的本地實例。)棘手的部分是告訴計算器主機應用程序關閉。
我認為這比使用COM更好,因為:
幾乎唯一的答案就是流程外的溝通。 您可以創建一個32位可執行文件的.NET項目,該項目需要進行所有32位調用,並通過Windows消息,WCF,命名管道,內存映射文件(4.0)等與之通信。我非常確定這就是Paint.NET如何通過64位進程進行WIA(Windows Imaging Acquisition)。
在PDN的情況下,他們只是將他們期望的文件名稱作為輸出傳遞,但更復雜的通信並不困難。 取決於你正在做什么,這可能是一個更好的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.