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

我写的一个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个回答

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

liuyan5462010
liuyan5462010 funcAplIFEntryEventFunc函数的定义是typedef long (PACSIFAPI *pAplIFEntryEventFunc)(long pageEndFunc, long reserve, long FAR* pErr);这个参数不好改吧。MFC里的事件定义成static没问题吗?
接近 2 年之前 回复
liuyan5462010
liuyan5462010 typedef long (PACSIFAPI *pAplIFEntryEventFunc)(long pageEndFunc, long reserve, long FAR* pErr);
接近 2 年之前 回复

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!