我想将一个组件系统中的组件A进行包装成组件B,B中每个函数每个除了实现组件A对应函数的功能外,还实现一些添加的功能
为了让原组件系统能直接调用包装后的组件B,是不是需要将B的组件名、guid和接口名,函数名设为和A一样?
但是,这样又有个问题,B中需要调用A的函数,但是B和A的guid一样,所以调用时出现错误,请教各位,如果我想实现这种包装,有没有其他的方法啊?谢谢

解决方案 »

  1.   

    使用聚合不就可以了吗?
    不要使用包容新建一个接口实现新的功能,并暴露出组件A的接口即可.这样B组件同时拥有A,B组件的功能
      

  2.   

    但是我要在原来的组件系统中直接用B取代A,直接调用B组件,而不是A组件,所以应该是要guid一样才可以吧?
      

  3.   

    比如我在math.dll这个组件中定义了一个接口IMathOpt,现在重写了一个math组件包装这个组件,定义一样的接口,一样的函数名,在第二个组件中调用第一个组件的函数
    STDMETHODIMP CMathOpt::Add(long lParam1, long lParam2, long *plResult)
    {
    // TODO: Add your implementation code here
    CoInitialize(NULL);
    CLSID clsid;
    CLSIDFromProgID(OLESTR("Math.MathOpt"), &clsid);
    CComPtr<IMathOpt> pMathOpt;  //智能指针
    pMathOpt.CoCreateInstance(clsid);
    pMathOpt->Add(lParam1,lParam2,plResult);
    pMathOpt.Release();
    CoUninitialize(); return S_OK;
    }
    是这样使用吧?
      

  4.   

    使用COM组件的聚合,但是你的另外一个组件必须得看看支持不支持聚合