2010-06-23 38 views
5

我有一个C#程序,可以在x64计算机上使用所有默认设置进行编译。p /从x64机器上运行的C#程序调用32位dll

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

当我的C#程序在32位机器上运行,而不是在64位机器上运行时,我可以得到这个工作。

如何在DllImport调用中指定我正在调用32位dll?什么我现在有

例子:

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

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

+0

可能重复或至少相关http://stackoverflow.com/questions/2989612 – 2010-06-23 17:29:39

回答

7

在64位进程中运行32位非托管代码是不可能的。或者相反。你有可供选择的方案:

  • 强制EXE在x86的模式与目标平台中构建标签
  • 重新编译C++ DLL在64位模式下运行的设置。这通常可以没有太多的麻烦,只要你有源代码,而不依赖于某些只有32位可用的第三方代码
  • 在代理进程中运行C++ DLL,位模式。您需要使用进程间通信机制来让您的64位进程与32位代理进行通信。命名管道,套接字,.NET Remoting,WCF是.NET中的典型选择。

第三个选项可以给你最大的回报,但是如果有大量的数据交换并且往往是脆弱的,它可能会很慢。处理代理过程失败可能很困难。

6

最简单的方法得到这个工作是改变你的EXE构建为“仅x86”。

+1

昨晚有同样的问题 - 正是我所做的。 – Jubal 2010-06-23 17:23:13

相关问题