C语言MFC导出dll回调函数方法详解
创始人
2024-01-30 22:07:56
0

如何将回调函数导出来

这一章节主要讲述在导出函数的基础上如何将回调函数导出来。

C++程序设计语言(第1-3部分)(原书第4版)

京东自营优惠价:¥119.1立即抢购

回调函数的应用相信很多C++程序猿儿们都不陌生吧,在某些场景下可谓是神助攻!那么,今天就来为大家讲解下,在导出dll中如何使用回调函数。

对于导出dll使用回调函数,大家不必惧怕,可以当成是回调类中主动调用方法,并在使用dll的开发程序中被触发。

下面,我就为大家详细讲解如何导出回调函数吧~

举一个简单的例子,sleep一定时间后通知应用程序函数。

操作流程,如下所示:

在实际开发中肯定不会在dll中将sleep作为回调函数处理,那真是吃饱了撑了,这里,只是用于简单例子说明,重点是想突出,如何让dll主动调用应用程序。

dll内部回调函数功能讲解

1:定义开始定时操作函数

该函数由调用dll的程序主动调用,告诉dll需要开始进行定时操作了。

对于这个函数,没什么过多说明,上一章节讲述了如何使用回调函数了,直接上代码:

.h中声明

1

2

//开始计算定时触发

_InterrExport void BeginTimerStart(int nTime);//开始计算定时触发时间

.cpp中实现

1

2

3

4

5

_InterrExport void BeginTimerStart(int nTime)

{

    Sleep(nTime);

    pFuncTimerDescrip("接收到了定时器触发结束消息~");

}

首先,根据参数进行sleep对应的秒数,时间到达后,由dll主动回调开发程序,其中pFuncTimerDescrip函数就是主动触发的。

对于pFuncTimerDescrip函数该如何操作呢?

2:回调函数

普通的回调方式不在过多说明,直接讲解在dll中的回调使用。

在例子中,回调函数是一个类似于TimerTriggerDescrip(std::string sDescrip);这样的函数结构。

参数只有一个,并且是字符串类型。

2.1:定义回调函数接口

普通的dll导出函数中,参数是一个明确类型的值,比如:int类型、float类型、甚至是一个结构体。

而作为回调函数来说,必不可少的就是注册回调函数,dll中的回调函数也是如此。

首先,定义回调函数

1

typedef void (*TimerTriggerDescrip)(std::string sDescrip); //回调函数,定时触发

其次,注册回调函数

1

_InterrExport void CallBackFunc_GetTimerTriggerDescrip(TimerTriggerDescrip callback);

对外部调用者来说,开放的仅仅是注册回调函数而已。

以上2.1中的所有代码,都在.h中声明。

2.2:dll中使用回调函数触发消息

这里所说的触发,也就是上述代码:

pFuncTimerDescrip("接收到了定时器触发结束消息~");

其中,pFuncTimerDescrip就是回调函数的指针。

在.cpp应用中设置

1

TimerTriggerDescrip pFuncTimerDescrip= nullptr;

到这里,在dll中设置回调函数就完成了,那么接下来,该实现如何在应用程序中调用dll中的回调函数了。

应用程序调用dll回调函数

1:加载dll库

在使用之前一定要记得加载dll,上一章节有详细介绍,这里就不说明了。

2:声明回调函数

在调用dll的地方需要将回掉函数的函数进行声明,与普通的dll导出函数方式一致,代码如下:

1

2

3

typedef void(*TimerTriggerDescrip)(std::string sDescrip);

typedef void (*CallBackFunc_GetTimerTriggerDescrip)(TimerTriggerDescrip);

CallBackFunc_GetTimerTriggerDescrip pCallFuncTimerDescrip;

TimerTriggerDescrip:该函数是dll库中,内部触发应用程序的函数,这里作为回调函数的参数也是需要声明的。

3:注册回调函数

在注册时,与普通的dll函数略有不同

1

2

3

//注册:回调函数

pCallFuncTimerDescrip = (CallBackFunc_GetTimerTriggerDescrip)GetProcAddress(handle, "CallBackFunc_GetTimerTriggerDescrip");

pCallFuncTimerDescrip(CallBack_ReceiveTimerDescrip);

CallBack_ReceiveTimerDescrip:该函数就是对应dll库中TimerTriggerDescrip函数。

1

2

3

4

5

//接收:dll回调函数

void CallBack_ReceiveTimerDescrip(std::string sDescrip)

{

    OutputDebugStringA(sDescrip.c_str());

}

相关内容

热门资讯

2025热词看中国经济⑧丨湾区...   编者按:2025年是“十四五”收官之年,也是中国式现代化进程中具有重要意义的一年。回眸这一年,经...
脱贫村的这五年 | 从“住上好...   巍巍太行山,浩然天地间。  地处太行山深处的河北省阜平县是一片红色沃土,这里是当年晋察冀边区政府...
如果家庭主要收入突然中断,生活... 一位五十多岁的父亲,独自抚养刚上大学的女儿,在一家制造企业做技术主管,每月税后收入一万八,是家里唯一...
财务规划中,那些很少被提前考虑... 三十多岁的设计师,在一家私企工作,每月收入两万多,手里有四十万存款,刚付了新房首付,每月房贷八千。他...
专访丨日本侵华罪行不容辩驳——...   新华社东京12月23日电 专访丨日本侵华罪行不容辩驳——日本历史学者谈苏联审讯日本731部队的解...
八件民生实事拼出2025上海幸...   八件民生实事拼出2025上海幸福拼图,让城市进步可感可及  界面新闻记者 | 刘素楠 杨舒鸿吉 ...
视频丨包头至银川高速铁路今天全...   国家“十四五”规划重点项目,我国“八纵八横”高铁网京兰通道的最后一段——包头至银川高速铁路今天全...
中国正能量|接续奋斗,汇聚强国...   以正能量引领亿万网民,用主旋律奏响奋进乐章。12月12日,由中央网信办主办的2025中国正能量网...
经济大省挑大梁|江苏发布“绿色...   枫叶绽红的季节,作为经济大省、工业大省的江苏,交出一份“绿色成绩单”。  “十四五”以来,江苏始...