【问题标题】:Problems while Importing a C++ managed dll to C#.NET Project将 C++ 托管 dll 导入 C#.NET 项目时出现问题
【发布时间】:2015-08-06 19:56:33
【问题描述】:

这似乎是标题中的重复问题,但让我澄清一下,我已经搜索并遵循了不同的方法。
基本上我必须将managed C++ dll 导入C# 项目。我查阅了一些教程,最后创建了一个managed C++ dll。现在在导入dll 时出现以下错误:

试图加载格式不正确的程序

我找到了一些解决方案,例如 this 但这些解决方案对我没有帮助。在遇到此错误之前,我必须先咨询this 解决方案,然后再咨询this 一个。

这是我尝试导入 dll 的屏幕截图:

设置:

代码:

请有人指导我在我的项目中导入dll 的正确方法。

【问题讨论】:

  • 仅供参考,“托管 C++”只是 Visual Studio 2005 之前的一个东西。在 VS2005 中,微软引入了 C++/CLI,语法有很大不同。
  • 如果你有一个 C++CLI DLL,为什么不直接引用它呢?无论如何,您都需要它来访问该 DLL 的功能。你的构建事件对我来说似乎没用。

标签: c# c++ dll marshalling dllimport


【解决方案1】:

此 C++ 库适用于特定架构(x64 或 x86)。另一方面,C# 不是(任何 CPU),这就是为什么会出现这种错误 - C# 很可能假设您有一个 x64 非托管库。您应该将 C# 项目中的架构限制为其中任何一个(x64 或 x86),以便在两个项目中它们是相同的。

【讨论】:

  • 我都试过了,但我仍然面临错误
  • 您必须确保两个项目具有相同的架构,并且 GetRegistryPath 函数已从您的非托管 DLL 中正确导出!因为“坏形象”很可能意味着架构不匹配!
  • 还有一件事-您应该在 DllImport 属性中包含文件扩展名,请参阅msdn.microsoft.com/en-us/library/…,正如 Niall 所说-如果确实管理了 dll,您应该将其添加到 C# 项目的引用中。
【解决方案2】:

您不应该将文件复制为预构建步骤吗?确保它在构建之前位于正确的位置。我也会删除exit 0,它不需要。

DllImport 通常用于本机 C 样式 API,而不是托管和 C++/CLI 程序集。这些 .Net 程序集,无论是否混合模式,都可以添加到通常的程序集依赖位置。

如果这是一个“托管 C++”而不是“C++/CLI”程序集,它也可能与目标 .Net 框架不兼容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2021-04-12
    • 2014-04-19
    • 1970-01-01
    • 2012-11-19
    相关资源
    最近更新 更多