【背景】
C#(界面)调用C++实现的动态库时,C++在处理过程会有一些日志信息,需要实时传送给C#,便于显示出来给用户提示查看。
【实现】
C++实现部分:
1、回调函数指针定义
typedef void(*LogCallBack)(const char* msg);
extern LogCallBack callBackFunc;
typedef void(*ProcessCallBack)(const char* info, int percent);
extern ProcessCallBack processCallBackFunc;
2、对外导出接口
函数声明:
extern "C" __declspec(dllimport) void SetDisplayLog(LogCallBack logCallBack, ProcessCallBack processCallBack);
函数实现:
void SetDisplayLog(LogCallBack logCallBack, ProcessCallBack processCallBack)
{
callBackFunc = logCallBack;
processCallBackFunc = processCallBack;
}
3、回调函数实例
C#实现部分:
- 导入动态库对应函数接口
[DllImport("ProjectSegment.dll", EntryPoint = "SetDisplayLog", CallingConvention = CallingConvention.Cdecl)]
public static extern void SetDisplayLog(LogCallBack logCallBack, ProcessCallBack processCallBack);
- 函数委托实现函数指针赋值
public delegate void LogCallBack(string logInfo);
private LogCallBack logcallback;
public delegate void ProcessCallBack(string info,int percent);
private ProcessCallBack processCallback;
- 回调函数实现部分
PS:回调函数的定义和实现根据自己实际情况需要实现。