c# - 在 NET Core 中调用从 C++ 项目构建的 .dll 时出现 BadImageFormatException

标签 c# c++ .net .net-core interop

我有两个预先存在的项目(C++、C# NET 4.5.2),其中 C# 项目调用 C++ 项目。在我将 NET 4.5.2 项目移植到 NET Core 之前,这一直很有效。现在,当我尝试访问从 C++ 项目构建的程序集时,出现 BadImageFormatException。是否可以从 NET Core 程序集调用此程序集?

public static string CallCPlusPlusConvert(string inputFileName)
{
    if (inputFileName == null) { throw new ArgumentNullException(nameof(inputFileName)); };

    return SafeNativeMethods.Convert(inputFileName);
}

internal class SafeNativeMethods
{
    [return: MarshalAs(UnmanagedType.BStr)]
    [DllImport("CPlusPlusProject", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
    internal static extern string Convert([MarshalAs(UnmanagedType.BStr)][In]string filePath);
}

最佳答案

请参阅此处 https://msdn.microsoft.com/en-us/library/k7137bfe.aspx

检查该 dll 是否专门用于您正在运行的架构以外的架构。检查你编译的 C++ dll 是什么

即不要在 32 位应用程序中使用 64 位 dll,反之亦然

编辑:我还看到您将其标记为 ASP.NET。如果您在 IIS 中运行它并遇到此问题,那么您可以尝试更改分配给项目的应用程序池的高级设置中的启用 32 位应用程序选项

关于c# - 在 NET Core 中调用从 C++ 项目构建的 .dll 时出现 BadImageFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46820197/

相关文章:

c++ - 重载一元运算符 &

c# - 多线程增量并在没有锁的情况下跳过0?

c# - 读数据时插入

c# - 队列保持引用或对象值?

c++ - OpenAl mp3 循环不工作

c++ - 连接不同的运算符

.net - 哪个是最好的 .Net XML-RPC 库?

c# - 使用 C# api 创建一个 mongodb 上限集合

c# - 获取 CodeDomProvider 实例的正确方法

c# - 如何通过 ViewModel 转到 DataGrid 中的特定行号