我在c ++中有一个简单的函数(不是类的方法)
__declspec(dllexport) extern "C" void __stdcall TestFunc();
我尝试从c#中调用它:
[DllImport("ImportTest.dll")]
public static extern void TestFunc();
...
TestFunc();
它抛出了“无法找到入口点”的例外情况。
什么错了?
感谢您帮助我:)
答案 0 :(得分:5)
尝试(猜测,该DLL是用VS编写的)
extern "C" __declspec(dllexport) void __stdcall TestFunc();
这是:
__declspec(dllexport)
通知编译器,该函数将从DLL导出; extern "C"
主要是为了防止function name decorations; __stdcall
,因为如果你在[DllImport]
指令中指定为none,这是默认的调用约定。将来,您可以使用Dll export viewer检查您的功能是否从DLL导出。
答案 1 :(得分:1)
在C ++函数中,在标题处(如果你的函数在标题中声明)添加
extern "C" _declspec(dllexport) void TestFunc();
在函数定义中使用
_declspec(dllexport) void TestFunc()
{
}
在C#侧,你需要声明一个像
这样的函数[DllImport(@"ImportTest.dll",
EntryPoint = "TestFunc",
ExactSpelling = false,
CallingConvention = CallingConvention.Cdecl)]
static extern void NewTestFunc()
现在使用NewTestFunc()