15,471
社区成员
发帖
与我相关
我的任务
分享
//Dll端
//回调函数声明
typedef int (CALLBACK *CallBackFun)(VOID *pUser, int iParam);
//回调函数用户
VOID *pCallBackUser = NULL;
//回调函数指针
CallBackFun pCallBackFun = NULL;
//设置回调函数
DLLExport BOOL SetCallBackFun(VOID *pUser, CallBackFun pFun)
{
pCallBackUser = pUser;
pCallBackFun = pFun;
return TRUE;
}
//带SEH异常捕捉的回调
int doCallBack(int i)
{
__try
{
if(pCallBackFun)
{
return pCallBackFun(pCallBackUser, i);
}
}
__except(EXCEPTION_EXECUTE_HANDLER )
{
ASSERT(FALES); //回调异常
return -1;
}
return 0;
}
//App端
//T1Dlg.h
class CT1Dlg : public CDialog
{
static int CALLBACK CallbackProc(VOID *pUser, int i);
……
//T1Dlg.CPP
CT1Dlg::CT1Dlg(CWnd* pParent /*=NULL*/) : CDialog(CT1Dlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
//设置回调函数指针
SetCallBackFun(this, CallbackProc);
}
//回调处理函数
int CALLBACK CT1Dlg::CallbackProc(VOID *pUser, int i)
{
CT1Dlg *pThis = (CT1Dlg*)pUser;
ASSERT(pThis->IsKindOf( RUNTIME_CLASS(CT1Dlg)) );
//处理数据
pThis->SetDlgItemInt(IDC_EDIT1, i);
//返回某些值
return i+1;
}