2010-08-25 82 views
14

我有一个C#2.0项目设置为“任何Cpu”,但是它引用了一个C++项目,它构建了一个32位的dll。如何在64位项目中引用32位DLL?

当我尝试在64位机器,我得到以下错误上运行我的程序:

System.BadImageFormatException was unhandled Message: Could not load file or assembly TreeTMHook, Version=1.0.2889.19619, Culture=neutral, PublicKeyToken=null or one of its dependencies. An attempt was made to load a program with an incorrect format.

我该如何解决这个问题?

更新

我希望能够保持主体工程的任何CPU。

谢谢。

+0

请记住“任何CPU”的含义。 **您**声称主项目无处不在,这意味着**你**负责消除所有架构依赖。 – MSalters 2010-08-26 09:05:45

回答

13

如果您希望它在64位计算机上正确加载32位DLL,则需要将.NET项目构建为32位(x86目标)。

RE:更新:

如果你想使你的项目为“任何CPU”,你需要一个32位和DLL的64位版本,并确保适当的版本一起发行你的应用。如果无法将其他项目构建为64位,则必须仅将.NET项目构建为32位。

4

您将不得不强制您的EXE项目以32位模式运行,以便它可以使用该C++ DLL。项目+属性,生成选项卡,平台目标= x86。

1

你可能想看看这个article它解释了为什么它不可能,简而言之,因为你在访问非托管代码时处理指针。

1

为了让您的主项目保持为Any Cpu,您需要提供.dll的32位和64位版本 - 这应该是可能的,从您从源代码构建它时就可以了。

然后,您需要提供一个清单指向它的可执行文件,以取决于平台的权利dll verion。