C语言MFC导出dll回调函数方法详解

 更新时间:2022年11月15日 17:09:04   作者:中国好公民st  
这篇文章主要为大家介绍了C语言MFC导出dll回调函数方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

如何将回调函数导出来

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

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

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

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

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

操作流程,如下所示:

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

dll内部回调函数功能讲解

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

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

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

.h中声明

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

.cpp中实现

_InterrExport void BeginTimerStart(int nTime)
{
	Sleep(nTime);
	pFuncTimerDescrip("接收到了定时器触发结束消息~");
}

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

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

2:回调函数

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

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

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

2.1:定义回调函数接口

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

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

首先,定义回调函数

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

其次,注册回调函数

_InterrExport void CallBackFunc_GetTimerTriggerDescrip(TimerTriggerDescrip callback);

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

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

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

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

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

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

在.cpp应用中设置

TimerTriggerDescrip pFuncTimerDescrip= nullptr;

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

应用程序调用dll回调函数

1:加载dll库

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

2:声明回调函数

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

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

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

3:注册回调函数

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

//注册:回调函数
pCallFuncTimerDescrip = (CallBackFunc_GetTimerTriggerDescrip)GetProcAddress(handle, "CallBackFunc_GetTimerTriggerDescrip");
pCallFuncTimerDescrip(CallBack_ReceiveTimerDescrip);

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

//接收:dll回调函数
void CallBack_ReceiveTimerDescrip(std::string sDescrip)
{
	OutputDebugStringA(sDescrip.c_str());
}

参数与dll中的回调函数保持一致,就可以接收到回调的信息了。

以上就是C语言MFC导出dll回调函数方法详解的详细内容,更多关于C语言MFC导出dll回调函数的资料请关注脚本之家其它相关文章!

相关文章

  • 如何通过函数指针调用函数(实现代码)

    如何通过函数指针调用函数(实现代码)

    指针可以不但可以指向一个整形,浮点型,字符型,字符串型的变量,也可以指向相应的数组,而且还可以指向一个函数
    2013-09-09
  • C++基于Floyd算法实现校园导航系统

    C++基于Floyd算法实现校园导航系统

    这篇文章主要为大家详细介绍了C++基于Floyd算法实现校园导航系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++ OpenCV实现与添加椒盐噪声和高斯噪音

    C++ OpenCV实现与添加椒盐噪声和高斯噪音

    图像噪声是图像在获取或是传输过程中受到随机信号干扰,妨碍人们对图像理解及分析处理的信号,本文为大家整理了C++结合OpenCV为图像添加椒盐噪声和高斯噪音的代码,需要的可以收藏一下
    2023-09-09
  • 关于C++中菱形继承和虚继承的问题总结

    关于C++中菱形继承和虚继承的问题总结

    C++的三大特性为:封装,继承,多态。但是在继承中,存在一些使用方面的问题需要注意,下面这篇文章主要给大家总结介绍了关于C++中菱形继承和虚继承的问题,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • C++实现LeetCode(117.每个节点的右向指针之二)

    C++实现LeetCode(117.每个节点的右向指针之二)

    这篇文章主要介绍了C++实现LeetCode(117.每个节点的右向指针之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 详解 linux c++的编译器g++的基本使用

    详解 linux c++的编译器g++的基本使用

    这篇文章主要介绍了详解 linux c++的编译器g++的基本使用的相关资料,需要的朋友可以参考下
    2017-01-01
  • 使用C++实现工资管理中的随机教师信息生成功能

    使用C++实现工资管理中的随机教师信息生成功能

    这篇文章主要介绍了使用C++实现工资管理中的随机教师信息生成功能,想要做一个教师工资管理系统,就必须得准备好数据,但是这些数据如果用手一行一行地敲,那么工作量是非常大的,因此,我就产生了用C语言实现直接生成大量的教师基本信息的想法,需要的朋友可以参考下
    2023-05-05
  • 一个win32窗口创建示例

    一个win32窗口创建示例

    这篇文章主要介绍了一个win32窗口创建示例,需要的朋友可以参考下
    2014-04-04
  • C++中map和set的简介及使用详解

    C++中map和set的简介及使用详解

    本文主要介绍了C++中map和set的简介及使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 使用opencv实现车道线检测实战代码

    使用opencv实现车道线检测实战代码

    这篇文章主要介绍了opencv车道线检测实战,效果非常逼真,代码简单易懂,对opencv车道线检测实战代码感兴趣的朋友一起看看吧
    2022-03-03

最新评论