我有一个C#2.0项目设置为“任何Cpu”,但它引用的是一个构建32位dll的C ++项目。
当我尝试在64位计算机上运行程序时,出现以下错误:
System.BadImageFormatException
是 未处理的消息:无法加载文件 或汇编TreeTMHook, Version=1.0.2889.19619, Culture=neutral, PublicKeyToken=null
或其中一个依赖项。一次尝试 是用来加载程序的 格式不正确。
我该如何解决这个问题?
更新
我希望能够将主项目保留为任何cpu。
感谢。
答案 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 引用。