我有一个奇怪的问题,我有一个C++ DLL,我正在使用DLL导入将其导入到C#库中。如果我指定入口点,一切都按预期工作,这是一个示例:
internal static class UnsafeMethods
{
[DllImport("GoodSchool.dll", EntryPoint = @"?AddNum@@YAHHH@Z")]
public static extern int AddNum(int num1, int num2);
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(UnsafeMethods.AddNum(4,5));
}
}
然而,如果我使用类似于这里的简化导入方式:
[DllImport("GoodSchool.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int AddNum(int num1, int num2);
我遇到了一个熟悉的错误信息:
未处理的异常:System.EntryPointNotFoundException: 在 DLL 'GoodSchool.dll' 中找不到名为 'AddNum' 的入口点
我使用 depends 工具验证了该方法是否已正确公开,并解码注释以验证参数和命名惯例 - 一切看起来都很好。
C++ 中的函数签名非常简单:
__declspec(dllexport) int AddNum(int num1, int num2);
有没有建议如何在不提供修饰名称为入口点的情况下,在C#中调用该方法?我做错了什么?我不想使用"C"导出,因为我的理解是,修饰函数名可以完全用于DllImport。