我有一个奇怪的问题,我有 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”的入口点
我使用依赖来验证该方法是否正确公开,并且我解码符号以验证参数和命名约定 - 一切似乎都很好。
C++ 中的函数签名非常简单:
__declspec(dllexport) int AddNum(int num1, int num2);
有什么建议我可以在 C# 中调用此方法而不提供修饰名称作为入口点吗?我做错了什么?我不想使用“C”导出,因为我的理解是修饰的函数名称非常适合与 DllImport 一起使用。