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

发布于 2024-09-16 12:45:52 字数 407 浏览 5 评论 0原文

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

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

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

我该如何解决这个问题?

更新

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

谢谢。

I've got a C# 2.0 project which is set to target 'Any Cpu', however it is referencing a C++ project that's building a 32 bit dll.

When I try to run my program on a 64bit machine I get the following error:

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.

How can I fix this?

Update

I want to be able to keep the main project as any cpu.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

久伴你 2024-09-23 12:45:52

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

回复:更新

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

You'll need to build your .NET project as 32bit (x86 target) if you want it to correctly load a 32-bit DLL on a 64bit machine.

RE: Update:

If you want to keep your project as "Any CPU", you'll need a 32bit and a 64bit version of the DLL, and make sure the appropriate version is distributed with your app. If you can't build the other project as 64bit, you must build your .NET project as 32-bit only.

迷雾森÷林ヴ 2024-09-23 12:45:52

您必须强制 EXE 项目在 32 位模式下运行,以便它可以使用该 C++ DLL。项目 + 属性,构建选项卡,平台目标 = x86。

You will have to force your EXE project to run in 32-bit mode so it can use that C++ DLL. Project + Properties, Build tab, Platform Target = x86.

屋檐 2024-09-23 12:45:52

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

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

To keep you main project as Any Cpu, you need to supply both 32 and 64 bit version of the .dll - which should be possible, seeing as you're building it from source.

You then need to supply the executable with a manifest pointing it toward to right dll verion depending on platform.

祁梦 2024-09-23 12:45:52

您可能想看看这篇文章,它解释了为什么这是不可能的,简而言之,因为您在访问非托管代码时正在处理指针。

You may want to take a look at this article it explains why it is not possible, in short since you are dealing with pointers when accessing unmanaged code.

﹏半生如梦愿梦如真 2024-09-23 12:45:52

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

Please use .net reflection and consume objects and its methods. Instead of direct 32 bit dll reference.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文