2017-10-18 116 views
0

我有两个预先存在的项目(C++,C#.NET 4.5.2),其中C#项目调用到C++项目。直到我将.NET 4.5.2项目移植到NET Core时,这一切都很完美。现在,当试图访问由C++项目构建的程序集时,我得到一个BadImageFormatException。是否可以从NET核心程序集调用该程序集?BadImageFormatException当调用由C++项目在NET核心构建的.dll

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); 
} 
+0

是“转换”保留类型也许在.NET核心词? – Grantly

+2

该方法的原始名称不是Convert。我删除了一个后缀,它给出了该方法属于哪个项目。 – Jeff

+0

你有没有尝试过使用StringBuilder作为类型而不是字符串?在DLL调用? – Grantly

回答

3

看到这里https://msdn.microsoft.com/en-us/library/k7137bfe.aspx

检查DLL没有专门针对比你正在运行的其它架构。检查你所遵循的C++ DLL作为

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

编辑:我也看到你所标记这是ASP.NET。如果您在IIS中运行此问题并解决此问题,则可以尝试更改启用32位应用程序选项,该选项位于分配给该项目的应用程序池的高级设置中

+0

这就是我期望的BadImageFormatException,但是该项目是使用与以前相同的MSBuild命令构建项目的脚本构建的。 – Jeff

+0

也许MSBuild的目标是一个不同的.NET版本。检查文件的细节,看看它是否不迟于4.5.2 – NattyMan0007

相关问题