温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言MFC怎么导出dll回调函数

发布时间:2022-11-18 10:19:30 来源:亿速云 阅读:107 作者:iii 栏目:开发技术

本文小编为大家详细介绍“C语言MFC怎么导出dll回调函数”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言MFC怎么导出dll回调函数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    如何将回调函数导出来

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

    操作流程,如下所示:

    C语言MFC怎么导出dll回调函数

    在实际开发中肯定不会在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回调函数”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI