Как определить с какого интерфейса вызван метод класса, если он имеет несколько интерфейсов, которые содержат одинаковые сигнатуры методов? Есть ли решение лучше, чем делать обертку для
интерфейса с переопределением методов (или это вовсе не решение)
interface IFace1 : public IUnknown
{
long Method()=0;
};
interface IFace2 : public IUnknown
{
long Method()=0;
};
class ATL_NO_VTABLE TFACEImpl :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<TFACEImpl, &CLSID_FACE>,
public IBase,
DUALINTERFACE_IMPL(Base, IFace1),
DUALINTERFACE_IMPL(Base, IFace2)
{
public:
...
BEGIN_COM_MAP(TR2MImpl)
COM_INTERFACE_ENTRY(IFace1)
DUALINTERFACE_ENTRY(IFace2)
END_COM_MAP()
STDMETHOD Method() // Реализация общая для обоих интерфейсов, а хотелось бы разделить
{
}
};
Здравствуйте, ak_miass, Вы писали:
_>Здравствуйте, Kolbas, Вы писали:
_>Где то видел решение. Подробности не помню, но суть в том, что
_>нужно сначала сделать по одному классу-потомку от каждого из интерфейсов и реализовать
_>одинаковые методы в них, а класс COM-объекта наследовать уже от этих классов, а не самих интерфейсов.
_>Возможно при этом придётся ещё поменять какие либо макросы в объявлении класса...
Спасибо, всётаки примерно так и сделал:
#define IID_ReFace1 IDD_IFace1;
interface IReFace1 : public IFace1
{
long Method(){return ReFace1Method()};
virtual ReFace1Method()=0;
}
interface IReFace2 : public IFace1
{
long Method(){return ReFace2Method()};
virtual ReFace2Method()=0;
}