liuyan5462010
liuyan5462010
采纳率0%
2018-01-18 07:38 阅读 1.2k

C++中取函数地址或者触发事件的问题

20

我写的一个C++的MFC程序,如下图:PageEndProc这个函数会作为一个回调函数传入funcAplIFEntryEventFunc这个函数,我在头文件里声明了一个事件PostScanEveryPage,需要在回调PageEndProc时触发这个事件。但是因为PageEndProc这个没加作用域限制符CPnScanOCXCtrl::导致调用PostScanEveryPage会提示未定义标识符;如果加上这个标识符,在传入funcAplIFEntryEventFunc会提示转换无效。不知道怎么做才是对的。

 // For Tool Kit
long _stdcall PageEndProc(CPnScanOCXCtrl* ,SCAN_PAGEINFO* pPage)
{
    gPageCnt++;
    PostScanEveryPage(gPageCnt);
    return 0;
}

LONG CPnScanOCXCtrl::Scan(LONG nXferCount, LONG bAsync)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    // TODO: 在此添加调度处理程序代码

    long sts;
    long errNo;

    if (!funcAplIFEntryEventFunc) {
        return 0;
    }
    if (!funcAplIFScanExec) {
        return 0;
    }
    // set event function
    sts = funcAplIFEntryEventFunc((long)PageEndProc, NULL, &errNo);
    }

图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • tiankuan1 tiankuan1 2018-01-18 07:52

    加CPnScanOCXCtrl::, PageEndProc会多出一个参数出来,所以转换无效。
    可以考虑改变funcAplIFEntryEventFunc的声明第一个参数类型,或者PostScanEveryPage是static也行,CPnScanOCXCtrl::PostScanEveryPage

    点赞 1 评论 复制链接分享
  • liuyan5462010 liuyan5462010 2018-01-18 08:07

    加CPnScanOCXCtrl::, PageEndProc会多出一个参数出来,所以转换无效。
    可以考虑改变funcAplIFEntryEventFunc的声明第一个参数类型,或者PostScanEveryPage是static也行,CPnScanOCXCtrl::PostScanEveryPage

    图片说明
    加static又蹦出新问题了。好难

    点赞 评论 复制链接分享

相关推荐