請問如何用IDispatch實現出接口,接受任何的事件消息?

解决方案 »

  1.   

    不可以吧?出接口是别人定义的,人家不定义成IDispatch接口或双接口,你怎么能用IDispatch接口去接收呢?就算都是IDispatch接口或双接口的话,你也根本不知道自己接收的是哪个事件,接收了又有什么用呢?
      

  2.   

    是的,现在就是这样的,我想在客户端根据传过来的dispid得到事件的名称,然后在发出去。
      

  3.   

    在多个事件源中dispid又不是唯一的,A事件源中一个dispid可以代表a事件,B事件源中同一个dispid可以代表b事件,你怎么能根据dispid判断到底是a事件被触发还是b事件被触发呢?
      

  4.   

    现在的事件都是dispatch接口的,有几个是自定义接口的。
    你看ATL中实现不连接点的代码
    CComVariant varResult;
    T* pT = static_cast<T*>(this);
    int nConnectionIndex;
    int nConnections = m_vec.GetSize();

    for (nConnectionIndex = 0; nConnectionIndex < nConnections; nConnectionIndex++)
    {
    pT->Lock();
    CComPtr<IUnknown> sp = m_vec.GetAt(nConnectionIndex);
    pT->Unlock();
    IDispatch* pDispatch = reinterpret_cast<IDispatch*>(sp.p);
    if (pDispatch != NULL)
    {
    VariantClear(&varResult);
    DISPPARAMS disp = { NULL, NULL, 0, 0 };
    pDispatch->Invoke(0x1, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, &varResult, NULL, NULL);
    }
    }
    return varResult.scode;
      

  5.   

    如何通過一個IDispatch接口,得到實現該接口的類會觸發的所有事件的名稱。麻煩各位高手解答。
      

  6.   

    又是一个错误的问题。。你这个IDispatch是出接口吗?那是由客户实现的,是接受事件的,而不是触发事件的。
      

  7.   

    我来谈一下吧!
    一、先谈概念
    incoming interface(引入接口) 一般是由组件自己实现的,用于接收客户的调用。
    outgoing interface(引出接口) 一般是由客户实现的,由组件使用来向客户发送通知。但是组件和客户只是一个相对的概念。组件也可以同时是客户,它也可能需要事件通知。同时,如果客户对外提供服务的话,它也可以是组件。二、解决思路
     ygang76 (小草)  的目的很清楚,是想实现已知的引出接口,作为客户以接收事件信息。
    引出接口是定义在别人的类型库里的或提供给你的.h、_i.c里的,你必须知道确切的接口定义,否则你无法接收事件通知。事件接口多半是IDispatch接口,以兼容于VB这样的语言工具。1、C++
      你的程序应该是一个连接点客户程序,用ATL框架实现事件接口。
    2、VB
       Dim WithEvents youObj As serverLib.IXXX   private Sub youObj_IMethod(...)
       ...
       End Sub
      

  8.   

    另外,ygang76(小草),不要用繁体字,看起来费劲
      

  9.   

    ultraboy兄弟,我想我的問題沒有問錯,隻是你可能沒有理解我的意思。
    其實在用IDispatch實現出接口時,客戶和服務器的概念已經很模糊,客戶其實也可以稱做服務器。因為服務器端觸發事件時是調用的IDispatch接口,這不是正好也反過來了嗎。客戶端此時也可以叫做服務器端,服務器端此時也可叫做客戶端。對於這個問題,我已經找到解決方案。謝謝大家的參與,但由於大家的回答都不是很符合我的意思,所以隻能酌情給分了,謝謝大家!!!
      

  10.   

    没有一合意的?既然 ygang76(小草)已經找到解決方案,可不可以给大家大致介绍一下。