关于ATL事件问题?请救急。谢谢。

编程环境vc.net

实现功能:实现不带属性的服务端事件

                     客户调用atl,当atl完成工作时激发事件,客户响应它,调用响应的函数。

问题:第一次工作工程成功,第二次继续调用atl时失败,提示读取内存错误

我的实现方法:按照规则在服务端实现相应的代码(参考书:vc.net宝典)

部分代码为:void _stdcall  UpData(void *p){

//更新数据线程,或实现其他的功能,这里省略,最后两句表示在更新完成激活事件

    CDbObject *p = (CDbObject*)p;

    pp->Fire_FinishUpData();//有wiz产生响应代码

}

     STDMETHODIMP CDbject::DoSomething()//接口方法

{DWORD tID;

CreateThread (0,0,(LPTHREAD_START_ROUTINE)UpData,(void*)this,0,&tID);

return S_OK;

}

按照规则在客户端实现相应的部分代码(参考书:vc.net宝典)

void OnRun()//函数onrun调用atl

{

          CoInitialize(NULL);

          _Module.Init(NULL,GetModulehandle(NULL));//_Module 是CCOmModule类

         try{

               IDbObjectPtr p(CLSID_DbObject);

               CEventHandler eh;//自定义类,从IDispEventImpl派生,并添加函数响应事件(函数仅蹦出一个对话框)

               eh.DispEventAdvise(p);

               p->DoSomething();

               sleep(1000);//监视器工作一秒钟

               eh.DispEventUnadvise(p);

        }

               catch(...)

               {...}

         _Module.Term();

         CoUninitialize();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值