C#调用C++带指针参数函数

C++ DLL代码

typedef void (__stdcall *fnSavedCB)(int savedLen);

__declspec(dllexport)
void __stdcall testSaveData(fnSavedCB fn)
{
    for (int i = 0; i < 10; ++i) {
        fn((i+1)*1024);
    }
}

注意在.def文件中声明testSaveData导出函数

C#调用代码

[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate void fnSaveCB(int savedLen);

[DllImport("testDLL", CallingConvention = CallingConvention.StdCall, EntryPoint = "testSaveData")]
public static extern void testSaveData(fnSaveCB);

//调用测试
public void SaveCB(int saveLen)
{
    System.Diagnostics.Trace.WriteLine("Saved:" + savedLen.ToString());
}

public void TestDll()
{
    testSaveData(SaveCB);
}

参考文章

https://stackoverflow.com/questions/5155180/changing-a-c-sharp-delegates-calling-convention-to-cdecl
https://www.codeproject.com/Articles/12512/Using-the-CDECL-calling-convention-in-C-changing

你可能感兴趣的:(C#)