Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET DLL中包装32位本机DLL以在64位.NET应用程序中使用_C#_.net_Dll_64 Bit_Native - Fatal编程技术网

C# 在.NET DLL中包装32位本机DLL以在64位.NET应用程序中使用

C# 在.NET DLL中包装32位本机DLL以在64位.NET应用程序中使用,c#,.net,dll,64-bit,native,C#,.net,Dll,64 Bit,Native,我有一个32位本机DLL,在32位.NET应用程序中动态加载并与之通信。然而,32位应用程序受到.NET 2Gb内存限制的限制,因此我有一个64位版本可用,并且我有一些64位本机DLL可以很好地使用,但我有一些DLL只能在32位中使用 我一直在阅读有关使用COM或IPC解决此问题的各种方法,但不知道以下方法是否可行: 1-创建“任意CPU”.NET DLL。 2-在此.NET DLL中加载32位本机DLL。 3-从我的64位.NET应用程序直接与.NET DLL通信。不,这将不起作用。如果编译依

我有一个32位本机DLL,在32位.NET应用程序中动态加载并与之通信。然而,32位应用程序受到.NET 2Gb内存限制的限制,因此我有一个64位版本可用,并且我有一些64位本机DLL可以很好地使用,但我有一些DLL只能在32位中使用

我一直在阅读有关使用COM或IPC解决此问题的各种方法,但不知道以下方法是否可行:

1-创建“任意CPU”.NET DLL。 2-在此.NET DLL中加载32位本机DLL。
3-从我的64位.NET应用程序直接与.NET DLL通信。

不,这将不起作用。如果编译依赖于32位本机DLL的AnyCPU程序集,则如果尝试在x64模式下加载该程序集,它将引发异常。这与您将自己的应用程序编译为AnyCPU并尝试加载32位模块的情况没有什么不同


唯一的选择是创建一个单独的32位进程,并使用某种IPC在32位和64位进程之间进行通信。

虽然没有相关性,但我正在动态加载DLL。这就是为什么我认为我可以侥幸逃脱。@DerfSkren如果你是动态加载一个DLL,那么你就依赖于这个DLL。您无法将32位DLL加载到64位进程中。我不会将其称为依赖项,因为应用程序可以在任一体系结构上使用或不使用DLL启动,它无法找到具有GetProcAddress的函数,因此不会向用户提供在DLL中找到的功能。尽管如此,如果没有人能提供任何见解,我会把你作为答案。@DerfSkren你所说的其实并不重要。您无法在64位应用程序中加载32位代码,无论您如何迂回地尝试这样做。你还需要什么洞察呢?嗯,依赖在编程中有特定的含义,这里没有“抛出异常”。从技术上讲,我无法使用32位调用约定加载寄存器和堆栈指针等并跳转到函数地址(就像在64位体系结构/OS上运行32位进程一样)的原因是什么?为什么我的AnyCPU程序集不能使用支持的“AnyCPU”的调用约定?我想,这是因为我能够解释你的主张。。。