【问题标题】:BadImageFormatException when using C++/CLI in a C# application在 C# 应用程序中使用 C++/CLI 时出现 BadImageFormatException
【发布时间】:2023-04-07 04:22:01
【问题描述】:

我目前正在 VS 2008 中开发一个应用程序,其中我有一个非托管 C++ 库 (A),它封装了两个现有库 (B + C) 以简化功能。 (A) 已经证明可以工作,我可以在 c++ 测试应用程序中成功调用和使用它。

(A) 的主要目的是供 C# 应用程序使用,为此我遵循以下链接:http://blogs.msdn.com/b/borisj/archive/2006/09/28/769708.aspx 创建 CLI 包装器 (D)。

一切似乎都很好,一切都可以编译,我试图在一个简单的 C# 应用程序中对此进行测试。我添加了对 (D) 的引用并启动了程序,但在尝试使用该类时却收到了 BadImageFormatException。根据我读到的内容,人们认为 DLL 中的某个地方存在版本不匹配,但是我已经在 Win32 中构建了它们以相互匹配。

除此之外,我还为 (D) 和 C# 应用程序提供了所有必需但似乎仍然存在问题的 DLL 的副本。我注意到编译时没有为 (D) 创建一个 dll,这是我猜测它为什么会崩溃的原因,但是由于我是新手,所以我不知道它是否应该这样做。

我是否可能没有在某处包含导致此问题的我忽略的 DLL?

TLDR:A 包装 B + C,A 被 D 包装以在 C# 应用程序中使用,但它命中并出现异常。 (我已将所有 DLL 放在它们应该去的地方(据我所知)并确保它们都匹配)。有没有我可能错过的陷阱?

【问题讨论】:

  • 对我来说,这听起来像是一些 dll 被编译为 32 位 dll 和一些 64 位 dll ......或者应用程序作为 64 位进程运行并尝试使用 32 位 dll,或者相反......类似那个。
  • 64b进程正确加载32b图片,但32b进程无法加载64b图片。
  • @Gusman,这是不正确的。

标签: c# c++ .net dll c++-cli


【解决方案1】:

尝试将编译模式更改为 x86 或任何 CPU 模式。

在您的解决方案中单击右键 > 配置管理器。

或者

构建 > 配置管理器

在配置管理器中将所有项目更改为在 x86 或任何 CPU 中编译,尝试两者。

【讨论】:

  • 谢谢,问题似乎在外部库中更进一步,在所有依赖项上都按照您的建议进行。
  • 您只需将EXE的平台更改为“x86”!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多