当前位置:首页 > 芯闻号 > 充电吧
[导读]最近经常写一些通信协议,因为底层收发不一样,使用起来不方便,如果能直接像C中使用回调函数就非常方便了,比如用串口发送,则初始化时传入串口发送的回调函数,用TCP的时候就使用TCP的回调函数,但是因为涉

最近经常写一些通信协议,因为底层收发不一样,使用起来不方便,如果能直接像C中使用回调函数就非常方便了,比如用串口发送,则初始化时传入串口发送的回调函数,用TCP的时候就使用TCP的回调函数,但是因为涉及到托管于非托管代码的指针,使用起来还是有点麻烦,简单来说就是讲托管函数使用委托,然后将委托的指针找到,转换为C++指针,然后就可以访问了。

添加命名空间


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);
}





本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

其实在 c++语言里面const修饰的才算是一个真正的常量,在 c 语言中 const 可以说是个“冒牌货”。为什么会这样?其实是 c++ 编译器对 const 进行了加强,当 c++ 编译器遇到常量声明时,不会像 c...

关键字: c++ C语言 const

返回函数的引用去初始化一个新的引用这个和前面一样,都是不会产生副本,但是现在是用返回值去初始化一个引用声明c,也就是说这时候变成了变量temp的别名,在c的生命周期内temp是一直有效的,这样做完全可以。

关键字: c++ 返回值 引用声明

什么是回调函数?`even.py`#回调函数1#生成一个2k形式的偶数defdouble(x):returnx*2#回调函数2#生成一个4k形式的偶数defquadruple(x):returnx*4`callback_...

关键字: 回调函数

C++是一种面向对象的高级程序设计语言,是C语言的超集。

关键字: c++ C语言

其实回调函数和普通函数没有本质的区别。首先让我们来看看普通的函数调用,假设我们在A函数中调用函数func:voidA(){...func();...}想一想,你怎么知道可以调用func呢?哦,原来func是你自己定义的:...

关键字: 回调函数

其实回调函数和普通函数没有本质的区别。首先让我们来看看普通的函数调用,假设我们在A函数中调用函数func:voidA(){...func();...}想一想,你怎么知道可以调用func呢?哦,原来func是你自己定义的:...

关键字: 回调函数

01什么是回调函数?回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义。我在百度上搜了一下,发现众说纷纭,有很大一部分都是使用类似这么一个场景来说明:A...

关键字: 回调函数

以前写过一篇关于回调函数的文章C语言函数指针之回调函数,今天又安排了一篇。

关键字: 回调函数 C语言

回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?

关键字: C语言 嵌入式 回调函数

STM32Cube HAL出来六七年了,还是有很多初学者没有适应,今天就分享一个读者问到的关于中断处理的问题。

关键字: 中断处理 回调函数
关闭
关闭