C#调用C++API,回调问题
C++:
//形参为std::function
void Test1(std::function<void(int)> CallBack)
{
CallBack(0);
}
//形参为函数指针
void Test2(void (*CallBack)(int))
{
Test1(CallBack);
}
C#:
//委托
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void CallBackDelegate(int X);
//声明DLL函数
[DllImport(DLLPath, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
extern static int Test1(CallBackDelegate CallBack);
[DllImport(DLLPath, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
extern static int Test2(CallBackDelegate CallBack);
C#通过调用Test2来间接调用Test1运行正常
而直接调用Test1,会出错。错误是“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”
Test1、Test2等API编译成DLL,同时给C++和C#工程使用。
我期望API是定义成std::function的,这样当C++来调用API的时候,可以方便的使用带参数捕获的lambda
问题是:
1、为什么C#不能直接调用Test1?
2、C#通过调用Test2来间接调用Test1的方式是否可行?(C++工程直接调用Test1,C#通过调用Test2间接调用Test1,相当于C#调用时加一层马甲)