COM 编写DLL 回调函数

panbin27 2008-11-17 03:36:51
dll 代码:

test.h文件部分关键代码
IControlClientPtr s_CtrlClientPtr;
typedef int (*completecbfn)(int channum,char * filename,void *flag);


test.cpp文件部分关键代码
static completecbfn m_compfn;
CTestApp theApp;

构造函数中已经 compfn=NULL;
#define NET_API extern "C"__declspec(dllexport)
NET_API int _stdcall record(void *handle, unsigned int channum, short time, char* filename, void* flag, completecbfn pcbfn)
{
m_compfn = pcbfn;
//test.dll调用下层另外一个dll文件
int rtn = theApp.s_CtrlClientPtr->record((long)handle, channum, time, filename);
return rtn;
}

STDMETHODIMP CTestApp::XEventSink::Invoke(DISPID dispid, REFIID, LCID, unsigned short wFlags
, DISPPARAMS* pDispParams, VARIANT* pvarResult, EXCEPINFO* pExcepInfo
, unsigned int* puArgError)
{
if (m_compfn!=NULL)
{
AfxMessageBox("Not NULL");
}else{
AfxMessageBox("NULL");
}

if(dispid == 2)
{
int channum = 0;//pDispParams->rgvarg[1].intVal;
CString temp = pDispParams->rgvarg[0].bstrVal;
char filename[256];
channum = atoi(temp.Mid(3,3));
wsprintf(filename,"%s",temp.Mid(13,255));

AfxMessageBox(filename);

int flag = 1;
int i1=0;
if (m_compfn!=NULL)
i1=m_compfn(channum,filename,&flag);//步骤A
}
return S_OK;
}
用户点击主界面录制按钮响应record事件,录制文件成功,但是当事件自动分发执行invoke中时,录制的dispid=2,所以执行if体,当运行到步骤A时,出现错误显示(Debug Assertion Failed!).想知道为什么这里回调机制会出现问题
...全文
115 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2008-11-17
  • 打赏
  • 举报
回复
调试出错的函数。
panbin27 2008-11-17
  • 打赏
  • 举报
回复
你说的是哪一块
oyljerry 2008-11-17
  • 打赏
  • 举报
回复
m_compfn 调用进去没?看是函数内部出错,还是调用出错?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧