在托管VC++中使用函数指针进行回调(实现回调函数功能)
2016-11-03 17:31
417 查看
最近经常写一些通信协议,因为底层收发不一样,使用起来不方便,如果能直接像C中使用回调函数就非常方便了,比如用串口发送,则初始化时传入串口发送的回调函数,用TCP的时候就使用TCP的回调函数,但是因为涉及到托管于非托管代码的指针,使用起来还是有点麻烦,简单来说就是讲托管函数使用委托,然后将委托的指针找到,转换为C++指针,然后就可以访问了。
添加命名空间
using namespace System::Runtime::InteropServices;
声明托管
delegate void ProcessDelegate(int len);
ProcessDelegate ^funCallBack1;
初始化托管,并获取托管函数的托管指针
需要传入的回调函数实现,比如数据发送与接收的具体实现,用串口还是TCP方式收发数据
初始化,传入外部接口的函数指针
协议栈中的调用,一般都是初始化时将回调函数指针传入,使用的时候直接使用回调函数即可
void callback(int times, void(*p)(int))
{
p(times);
}
添加命名空间
using namespace System::Runtime::InteropServices;
声明托管
delegate void ProcessDelegate(int len);
ProcessDelegate ^funCallBack1;
初始化托管,并获取托管函数的托管指针
funCallBack1 = gcnew ProcessDelegate(this, &温湿度采集::Form1::printGoodbye); IntPtr pvFun = Marshal::GetFunctionPointerForDelegate(funCallBack1);//可将pvFun强制转化为void*,再强制转化为FUN类型
需要传入的回调函数实现,比如数据发送与接收的具体实现,用串口还是TCP方式收发数据
void printGoodbye(int len) { printf("送客送客 -- %d/n", len); }
初始化,传入外部接口的函数指针
callback(10, (void(*)(int))pvFun.ToInt32());//将托管的指针变为32bit的C++指针即可进行调用
协议栈中的调用,一般都是初始化时将回调函数指针传入,使用的时候直接使用回调函数即可
void callback(int times, void(*p)(int))
{
p(times);
}
相关文章推荐
- 使用函数指针,完成一个sort()函数,能对任何类型的数组元素进行排序: 回调函数 以及 memcpy ()原型实现
- C#中使用托管C++类,委托调用,以供托管C++类的成员函数回调的实现方式
- VC中使用GDI函数实现位图的透明
- VC中使用GDI函数实现位图的透明
- 使用IDispatch::Invoke函数在C++中调用C#实现的托管类库方法
- 在SQL SERVER中实现Split功能的函数,并在存储过程中使用
- JXCELL实例学习与研究(六) 之 sheet的分页功能的实现,以及基本EXCEL公式的使用 以及补充函数说明
- 用js进行url编码后用php反解以及用php实现js的escape功能函数总结
- [VC/MFC]使用CTabCtrl控件实现属性页功能
- VC回调函数定义和使用
- SQL2000系统表、存储过程、函数的功能介绍及应用2009年01月21日 星期三 11:38虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL
- 用最简单的函数实现功能:判断一个int数据是否是2的x次幂(不能使用循环)。
- 转:使用IDispatch::Invoke函数在C++中调用C#实现的托管类库方法
- VC中实现按钮提示,使用CToolTipCtrl2007年01月23日 星期二 20:09如果你需要对对话框上的一个按钮进行鼠标停靠提示,那么这么做:
- 在C++中使用事件回调机制(通过Observer模式、函数指针等实现)
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- 使用IDispatch::Invoke函数在C++中调用C#实现的托管类库方法
- [VC/MFC]使用CTabCtrl控件实现属性页功能
- 使用Oracle函数实现按汉字拼音首字母查询功能
- VC++ 的类中使用函数指针的小例子,通过函数指针调用不同的函数