从运行在x64机器上的C#程序调用32位dll

从运行在x64机器上的C#程序调用32位dll,c#,c++,pinvoke,C#,C++,Pinvoke,我有一个C#程序,在x64计算机上使用所有默认设置编译 我想调用一个DLL,我知道它是32位(非托管)C++ dll。 当我的C#程序在32位机器上运行时,我可以让它工作,但不能在64位机器上运行 如何在DllImport调用中指定我正在调用的32位dll 我现在拥有的示例: [DllImport("test32bitdll.dll", SetLastError=true)] public static extern void MyFunc(); 我没有test32bitdll.dll文件的源

我有一个C#程序,在x64计算机上使用所有默认设置编译

我想调用一个DLL,我知道它是32位(非托管)C++ dll。 当我的C#程序在32位机器上运行时,我可以让它工作,但不能在64位机器上运行

如何在DllImport调用中指定我正在调用的32位dll

我现在拥有的示例:

[DllImport("test32bitdll.dll", SetLastError=true)]
public static extern void MyFunc();

我没有test32bitdll.dll文件的源代码。

最简单的方法是将exe更改为“仅x86”版本。

在64位进程中运行32位非托管代码是不可能的。或者相反。您可用的选项包括:

  • 使用Build选项卡中的Target Platform设置强制EXE在x86模式下运行
  • 在X64模式下重新编译C++ DLL。如果您有源代码,并且不依赖于某些仅32位的第三方代码,那么这通常是可能的,不会有太多麻烦
  • 在强制执行32位模式的代理进程中运行C++ DLL。您需要使用进程间通信机制使64位进程与32位代理进行通信。命名管道、套接字、.NET远程处理、WCF是.NET中的典型选择

第三种选择可以让你获得最大的回报,但如果有大量的数据交换,而且往往是脆弱的,那么它的速度可能会很慢。代理过程的失败可能很难处理。

昨晚也遇到了同样的问题——正是我所做的。可能重复或至少相关