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

时间:2010-06-23 17:20:58

标签: c# c++ pinvoke

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

我想p /调用一个我知道是32位(非托管)C ++ DLL的DLL。

当我的C#程序在32位计算机上运行时,我可以使用它,但不是64位计算机。

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

我现在拥有的例子:

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

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

2 个答案:

答案 0 :(得分:7)

无法在64位进程中运行32位非托管代码。或者相反。您可以选择的选项:

  • 使用“构建”选项卡中的“目标平台”设置强制EXE在x86模式下运行
  • 在x64模式下重新编译C ++ DLL。如果您拥有源代码而不依赖于仅以32位提供的某些第三方代码,那通常可以避免太多麻烦。
  • 在代理进程中运行C ++ DLL,该代理进程被强制以32位模式运行。您需要使用进程间通信机制来使您的64位进程与32位代理进行通信。命名管道,套接字,.NET Remoting,WCF是.NET中的典型选择。

第三个选项可以为你提供最大的收益,但如果交换了大量数据并且往往很脆弱,它可能会很慢。处理代理过程的失败可能很困难。

答案 1 :(得分:6)

最简单的方法是将你的exe改为“仅限x86”。