我分别对ITryMsg调用Msg,对ITryMsgEx调用MsgEx,结果都是Msg的执行结果
我该如何解决使它们都各自调用自己的函数?
class TryMsg : 
public IDispatchImpl<ITryMsg, &IID_ITryMsg, &LIBID_ADVCOUNTLib>, 
public IDispatchImpl<ITryMsgEx, &IID_ITryMsgEx, &LIBID_ADVCOUNTLib>,......
{........
BEGIN_COM_MAP(TryMsg)
COM_INTERFACE_ENTRY2(IDispatch, ITryMsg)//只有ITryMsg管用
COM_INTERFACE_ENTRY(ITryMsg)
COM_INTERFACE_ENTRY(ITryMsgEx)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
...........
public:
STDMETHOD(MsgEx)();//MessageBox("MsgEx")
STDMETHOD(Msg)();//MessageBox("Msg")
};

解决方案 »

  1.   

    你是怎么调用的?
    看看IDL文件中ITryMsg和ITryMsg的IID定义是否相同?
      

  2.   

    肯定不同,因为如果msg和msgEx结构不一样的话,会报错。
    我的调用方法如下:仍然有问题,不行,根本是MsgEx当Msg了
    ITryMsg* pTry;
    ......
    pTry->CreateDispatch
    pTry->Msg()
    ITryEx* pTryEx;
    pTryEx->CreateDispath
    pTryEx->MsgEx()
      

  3.   

    CreateDispath是你接口的方法吗?客户端代码全点.
      

  4.   

    我是通过Add from lib...倒入的自动化的冬冬。
    只有Msg,MsgEx为自定义的
      

  5.   

    COleDispatchDriver只能包装COM对象的默认IDispath接口(通过CreateDispath方法),也即你的ITryMsg接口,所以每次调用的都是ITryMsg的Msg方法。
    你不要用包装类,直接调用即可。
    ITryMsg* pTry;
    ITryEx* pTryEx;
    CoCreateInstance(...,(void**)&pTry);
    pTry->Msg();
    pTry->QueryInterface(IID,(void**)&pTryEx);
    pTryEx->MsgEx();
      

  6.   

    一个实现类的IDispatch接口只能有一个,或者只有一个缺省的IDispatch.你的接口只有一个能从IDispatch派生,另一个是IUnknown