在com中声明了一个回调接口
interface ICallBack : IUnknown
{
      HRESULT SayHello();
};inteface ITest : IUnknown
{
      HREAULT Register(ICallBack* pcb, DWORD* pid)
}在客户端实现该接口,并注册回调,为什么调用时客户端实现的SayHello执行不到?在线等待,很急,各位对com中的回调有什么好的办法.

解决方案 »

  1.   

    GZ
    请大家也关注一下http://community.csdn.net/Expert/topic/3654/3654639.xml?temp=.6078302
      

  2.   

    回调指针数组 m_arCallBase 
    HREAULT UnRegister(DWORD id)
    {
       反注册
    }HREAULT Register(ICallBack* pcb, DWORD* pid)
    {
            check pcb
            check pid      if (m_arCallBase中有)
          {
             *pid = (DWORD)pcb;
             return S_OK;
           }
           
           pcb->addref()
           m_arCallBase.add(pcb)
           *pid = (DWORD)pcb;
           return S_OK;
    }CTest::ddd()
    {
      for(m_arCallBase)
           m_pcb->SayHello();
      
    }
    FinalRelease()
    {
       删除
    }
      

  3.   

    我知道COM回调还又两种方法:
    1。把客户端函数的地址当作参数传递到COM的方法
    2。使用连接点,这个:
    http://blog.csdn.net/vigorcsdn/archive/2004/11/04/166267.aspx