C#动态调用C++DLL中的函数

DLL中导出的函数

cpp 复制代码
typedef void (*HQ_MSG_CALLBACK)(void *h, int nMsg, int nMsgType, int nReqNo, const char *szData, int nSize);
void SetMsgFunc(void *h, HQ_MSG_CALLBACK pmsgCallBack);

C#动态调用上述函数

csharp 复制代码
public delegate void CALLBACK(IntPtr h, int nMsg, int nMsgType, int nReqNo, IntPtr data, int nSize);
[DllImport(DllPath, CallingConvention = CallingConvention.Cdecl)]
private static extern void SetMsgFunc(CALLBACK pmsgCallBack);


public static void HQCallBack(IntPtr h, int nMsg, int nMsgType, int nReqNo, IntPtr data, int nSize)
{}
HQ_MSG_CALLBACK callBackFunc = new HQ_MSG_CALLBACK(HQCallBack);
SetMsgFunc(callBackFunc);//也可直接传HQCallBack函数名

其中函数指针由委托delegate替代,使用时可以传委托对象,也可以直接传函数名;指针由IntPtr替代

相关推荐
achene_ql3 小时前
select、poll、epoll 与 Reactor 模式
linux·服务器·网络·c++
SY师弟4 小时前
51单片机——计分器
c语言·c++·单片机·嵌入式硬件·51单片机·嵌入式
程序猿小D5 小时前
第22节 Node.js JXcore 打包
开发语言·人工智能·vscode·node.js·c#
豪斯有话说5 小时前
C++_哈希表
数据结构·c++·散列表
飞由于度6 小时前
C#中清空DataGridView的方法
开发语言·c#
real_metrix6 小时前
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
c++·迭代器·迭代器失效·erase
朝朝又沐沐6 小时前
基于算法竞赛的c++编程(18)string类细节问题
开发语言·c++·算法
大熊程序猿7 小时前
《开篇:课程目录》
前端·c#
a.3027 小时前
C++ 时间处理指南:深入剖析<ctime>库
数据结构·c++·算法
周杰伦fans8 小时前
C#中用于控制自定义特性(Attribute)
后端·c#