我有一個64位C++進程,加載了一個AnyCPU C#DLL。 可以這樣嗎AnyCPU C#DLL可以加載32位C++ DLL,還是隻能加載64位DLL?64位進程中的AnyCPU C#DLL加載32位DLL
謝謝! :-)
我有一個64位C++進程,加載了一個AnyCPU C#DLL。 可以這樣嗎AnyCPU C#DLL可以加載32位C++ DLL,還是隻能加載64位DLL?64位進程中的AnyCPU C#DLL加載32位DLL
謝謝! :-)
AnyCPU DLL在調用進程的上下文中運行,根據您的問題它是x64。如果此AnyCPU DLL加載另一個DLL,這也運行在加載AnyCPU DLL的x64調用進程的上下文中。這是跨不同平臺運行代碼的問題。如果要通過調用AnyCPU DLL的x64process運行32位DLL,則需要創建一個名爲SURROGATE進程的東西 - 這基本上是一個x86(32位)進程,可以運行並加載32位DLL你想從調用x64進程訪問。一旦運行了此x86進程,此x64進程就可以使用進程間通信與x86進程(已加載x86 DLL)進行通信,並且可以實現從x64進程間接調用x86 DLL函數。
不,您無法將32位DLL加載到64位進程中。
AnyCPU
意味着C#DLL可以加載到32位或64位進程中,而不是它可以加載任一位的DLL。
您只能加載與進程具有相同位的dll。 Any CPU
DLL本身可以在64位和32位進程中加載,但這並不意味着可以將本機32位DLL加載到64位進程中。
我知道的唯一解決方法是有一個32位幫助進程,加載您的32位DLL,然後與該進程進行通信。
32位DLL無法在64位進程中加載。
我在您的問題中看到一個問題:您的AnyCPU
程序集不可能加載32位C++ dll,因爲它使該程序集特定於此體系結構。
使之成爲AnyCPU
意味着它將動態加載特定於它所運行的體系結構的DLL。這種方式運行於任何CPU。
總之,該程序集被錯誤地標記爲AnyCPU。
32位程序集也可以在任何CPU上運行。 – 2011-04-26 09:59:37
其他解決方法是讓AnyCPU程序集加載對應於該體系結構的C++ DLL – CharlesB 2011-04-26 09:57:58
如果您擁有64位版本的dll,那顯然是最好的解決方案。 – CodesInChaos 2011-04-26 10:05:51