Halcon机器视觉论坛

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1707|回复: 37
收起左侧

[资料] C++如何使用回调函数?

[复制链接]
  • TA的每日心情
    耍酷
    昨天 16:46
  • 签到天数: 636 天

    连续签到: 23 天

    [LV.9]以坛为家II

    353

    主题

    1357

    帖子

    5261

    积分

    Rank: 9

    积分
    5261

    突出贡献优秀版主荣誉管理论坛元老切换助手验证会员最佳新人

    发表于 2018-1-23 19:25:34 | 显示全部楼层 |阅读模式

    管理员 |主题 353|帖子 1357|积分 5261

    51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

    您需要 登录 才可以下载或查看,没有帐号?会员注册

    x
          回调函数就是通过把自己的方法注册给别人,然后别人需要返回数据的时候通过你之前注册的函数将参数给你返回来。意思很简单,那么接下来,我们就用最近一个朋友的案例来解释下这个函数的原理。

    环境先说明下:用win32写一个dll然后用主程序去调用。

    dll中声明部分*.h文件:

    1. #ifndef MDLL_API
    2. #define MDLL_API        extern "C" __declspec(dllimport)
    3. #else
    4. #define MDLL_API    extern "C" __declspec(dllexport)
    5. #endif

    6. typedef void (*ShowMessage)(char* chText);
    7. MDLL_API void  RegisterShow(ShowMessage pMsg);
    8. MDLL_API void  CallMsg(char* chText);
    复制代码


    实现部分*.cpp:
    1. #include "stdafx.h"
    2. #define MDLL_API
    3. #include "mdll.h"

    4. ShowMessage showMsg;
    5. MDLL_API void  RegisterShow(ShowMessage pMsg)
    6. {
    7.         if(pMsg!=nullptr)
    8.         {
    9.                 showMsg = pMsg;
    10.         }
    11. }

    12. MDLL_API void  CallMsg(char* chText)
    13. {
    14.         if(showMsg!=nullptr)
    15.         {
    16.                 showMsg(chText);
    17.         }
    18. }
    复制代码


    上面就两个函数,通过RegisterShow将方法注册给dll,然后在主程序人为调用,引发参数被回调回来。

    主程序中main函数我们这样写
    1. #include "..\\mdll\\mdll.h"
    2. #pragma comment(lib, "..\\debug\\mdll.lib")


    3. void DispMessage(char* chText)  
    4. {  
    5.         int num = MultiByteToWideChar(0,0,chText,-1,NULL,0);
    6.         wchar_t *wide = new wchar_t[num];
    7.         MultiByteToWideChar(0,0,chText,-1,wide,num);
    8.         ::MessageBox(0,wide,0,0);
    9. }  

    10. int main(int argc, char* argv[])  
    11. {  
    12.         //注册回调函数
    13.         ShowMessage showMsg;
    14.         showMsg = DispMessage;
    15.         RegisterShow(showMsg);
    16.         
    17.         //人为触发回调
    18.         CallMsg("Hello,World!");

    19.         system("pause");
    20.         return 0;  
    21. }
    复制代码


    其中,DispMessage函数我们并没有直接去调用,而且在上面showMsg = DispMessage; 把地址给了回调的类型,在dll中引发该函数。

    附件是vs2010 c++开发的代码,有兴趣学习的可以自己下载看看!
    游客,如果您要查看本帖隐藏内容请回复


    无效附件更新 权限提升操作 删帖申请 举报以及其他需要帮助请加入QQ群:214663141 广告位招商 有意者联系
  • TA的每日心情
    害羞
    2017-11-30 10:06
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    0

    主题

    6

    帖子

    43

    积分

    Rank: 1

    积分
    43
    发表于 2018-1-24 10:23:59 | 显示全部楼层

    试用员工 |主题 0|帖子 6|积分 43

    学习学习

    发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    叹气
    13 小时前
  • 签到天数: 440 天

    连续签到: 1 天

    [LV.9]以坛为家II

    27

    主题

    190

    帖子

    1625

    积分

    Rank: 7Rank: 7Rank: 7

    积分
    1625

    活跃会员优秀版主切换助手验证会员

    发表于 2018-1-24 10:27:42 | 显示全部楼层

    版主 |主题 27|帖子 190|积分 1625

    好东西,分享一下

    发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    害羞
    2018-3-26 09:14
  • 签到天数: 45 天

    连续签到: 1 天

    [LV.5]常住居民I

    2

    主题

    33

    帖子

    151

    积分

    Rank: 2Rank: 2

    积分
    151
    发表于 2018-1-25 08:32:17 | 显示全部楼层

    正式员工 |主题 2|帖子 33|积分 151


    学习学习

    发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    叹气
    2019-2-20 09:11
  • 签到天数: 28 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    0

    主题

    24

    帖子

    152

    积分

    Rank: 1

    积分
    152

    活跃会员

    发表于 2018-2-1 15:30:42 | 显示全部楼层

    试用员工 |主题 0|帖子 24|积分 152



    好东西,分享一下

    发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    该用户从未签到

    0

    主题

    3

    帖子

    105

    积分

    Rank: 1

    积分
    105

    切换助手验证会员

    发表于 2018-2-10 18:43:46 | 显示全部楼层

    试用员工 |主题 0|帖子 3|积分 105

    下载学习一下,谢谢楼主!

    发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    害羞
    2018-3-26 15:34
  • 签到天数: 8 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    0

    主题

    9

    帖子

    461

    积分

    Rank: 2Rank: 2

    积分
    461
    发表于 2018-2-12 17:00:47 | 显示全部楼层

    正式员工 |主题 0|帖子 9|积分 461

    MARK,学习学习

    发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    该用户从未签到

    0

    主题

    0

    帖子

    77

    积分

    Rank: 1

    积分
    77

    切换助手验证会员

    发表于 2018-2-22 11:54:38 | 显示全部楼层

    试用员工 |主题 0|帖子 0|积分 77

    学习学习

    发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    害羞
    2017-12-1 08:25
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    0

    主题

    16

    帖子

    64

    积分

    Rank: 1

    积分
    64

    切换助手验证会员

    发表于 2018-2-24 12:53:19 | 显示全部楼层

    试用员工 |主题 0|帖子 16|积分 64

    C++如何使用回调函数 eeeeeeeeeeeeeeeeeee

    发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    您需要登录后才可以回帖 会员登录 | 会员注册

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    Halcon鸟叔机器视觉1鸟叔机器视觉 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用反馈 | 51Halcon论坛管理团队论坛管理团队

    申请友链| 小黑屋| 手机版| Archiver| Halcon机器视觉论坛  

    粤ICP备15095995号-2 粤公网安备44030602000670号

    Powered by Discuz! X3.4 Licensed© 2015-2019 Comsenz Inc.

    快速回复 返回顶部 返回列表