C#调用C++ 平台调用P/Invoke 函数指针/回调函数【二】

时间:2023-01-24 19:00:38

【1】C++代码


定义函数指针:


typedef int (*PCALLBACKFUN)(int i);


定义导出函数,返回函数指针:


/************************************************************************/
/* 2. 函数指针 */
/************************************************************************/
int PrintInt( int i )
{
return(wprintf(L"CallBack_GetFunPtr %d\n", i));
}

EXPORTDLL_API PCALLBACKFUN CallBack_GetFunPtr()
{
return(PrintInt);
}


【2】C# 导入代码


定义对应C++函数指针的委托:


public delegate int DelegateGetFunPtrType(int i);

定义导入函数:


        [DllImport("ExportDll.dll", CharSet = CharSet.Unicode)]
[return:MarshalAs(UnmanagedType.FunctionPtr)]
public static extern DelegateGetFunPtrType CallBack_GetFunPtr();

测试:


 CExportDll.DelegateGetFunPtrType printInt = CExportDll.CallBack_GetFunPtr();
printInt(100);