日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]最近經(jīng)常寫一些通信協(xié)議,因?yàn)榈讓邮瞻l(fā)不一樣,使用起來(lái)不方便,如果能直接像C中使用回調(diào)函數(shù)就非常方便了,比如用串口發(fā)送,則初始化時(shí)傳入串口發(fā)送的回調(diào)函數(shù),用TCP的時(shí)候就使用TCP的回調(diào)函數(shù),但是因?yàn)樯?

最近經(jīng)常寫一些通信協(xié)議,因?yàn)榈讓邮瞻l(fā)不一樣,使用起來(lái)不方便,如果能直接像C中使用回調(diào)函數(shù)就非常方便了,比如用串口發(fā)送,則初始化時(shí)傳入串口發(fā)送的回調(diào)函數(shù),用TCP的時(shí)候就使用TCP的回調(diào)函數(shù),但是因?yàn)樯婕暗酵泄苡诜峭泄艽a的指針,使用起來(lái)還是有點(diǎn)麻煩,簡(jiǎn)單來(lái)說(shuō)就是講托管函數(shù)使用委托,然后將委托的指針找到,轉(zhuǎn)換為C++指針,然后就可以訪問(wèn)了。

添加命名空間


using?namespace?System::Runtime::InteropServices;


聲明托管


delegate?void?ProcessDelegate(int?len);
ProcessDelegate?^funCallBack1;


初始化托管,并獲取托管函數(shù)的托管指針

funCallBack1?=?gcnew?ProcessDelegate(this,?&溫濕度采集::Form1::printGoodbye);
IntPtr?pvFun?=?Marshal::GetFunctionPointerForDelegate(funCallBack1);//可將pvFun強(qiáng)制轉(zhuǎn)化為void*,再?gòu)?qiáng)制轉(zhuǎn)化為FUN類型


需要傳入的回調(diào)函數(shù)實(shí)現(xiàn),比如數(shù)據(jù)發(fā)送與接收的具體實(shí)現(xiàn),用串口還是TCP方式收發(fā)數(shù)據(jù)

void?printGoodbye(int?len)
{
???printf("送客送客?--?%d/n",?len);
}



初始化,傳入外部接口的函數(shù)指針

callback(10,?(void(*)(int))pvFun.ToInt32());//將托管的指針變?yōu)?2bit的C++指針即可進(jìn)行調(diào)用


協(xié)議棧中的調(diào)用,一般都是初始化時(shí)將回調(diào)函數(shù)指針傳入,使用的時(shí)候直接使用回調(diào)函數(shù)即可


void?callback(int?times,?void(*p)(int))
{
	p(times);
}





本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉