如何在64位项目中引用32位DLL?

时间:2010-08-25 12:08:07

标签: c# .net c++ visual-studio-2008 dll

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

当我尝试在64位计算机上运行程序时,出现以下错误:

  

System.BadImageFormatException是   未处理的消息:无法加载文件   或汇编TreeTMHook, Version=1.0.2889.19619, Culture=neutral, PublicKeyToken=null   或其中一个依赖项。一次尝试   是用来加载程序的   格式不正确。

我该如何解决这个问题?

更新

我希望能够将主项目保留为任何cpu。

感谢。

5 个答案:

答案 0 :(得分:14)

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

RE:更新:

如果您希望将项目保留为“任何CPU”,则需要32位和64位版本的DLL,并确保随应用程序分发相应的版本。如果无法将其他项目构建为64位,则必须将.NET项目构建为32位。

答案 1 :(得分:4)

您必须强制EXE项目以32位模式运行,以便它可以使用该C ++ DLL。 Project + Properties,Build选项卡,Platform Target = x86。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

要将主项目保留为Any Cpu,您需要提供.dll的32位和64位版本 - 这应该是可能的,当您从源代码构建它时看到。

然后,您需要为可执行文件提供一个清单,根据平台将其指向右侧dll版本。

答案 4 :(得分:-2)

请使用 .net 反射并使用对象及其方法。而不是直接的 32 位 dll 引用。