Как сделать COM-класс ATL полученным из базового класса?

Периодическая проверка всех доступных потоков может помочь понять, когда кто-то вошел в комнату, но не в потоковую.

9
задан Mykola 22 December 2015 в 19:45
поделиться

2 ответа

Отредактируйте код, который генерируют мастера. Если Вы хотите объект произойти из дополнительных интерфейсов, добавьте эти базовые классы к получающемуся объявлению класса.

0
ответ дан 5 December 2019 в 02:28
поделиться

Просто предложение - если Ваш COM-объект не должен делать ничего специального с COM связанный материал затем, можно реализовать код, таким образом, что реальная логика, которую делает основной COM-класс, инкапсулируется в другом простом классе C++, говорит CBaseLogic.

CBaseLogic : IBase

class ATL_NO_VTABLE CBase :
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CBase, &CLSID_Base>,
    public ISupportErrorInfo,
    public IConnectionPointContainerImpl<CBase>,
    public CProxy_IBaseEvents<CBase>,
    public IDispatchImpl<IBase, &IID_IBase, &LIBID_ExampleLib
{
CBaseLogic m_LogicObj; /* Method calls are simply forwarded to this member */
};


CDerivedLogic : public CBaseLogic

class ATL_NO_VTABLE CDerived :
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CDerived, &CLSID_Base>,
    public ISupportErrorInfo,
    public IConnectionPointContainerImpl<CDerived>,
    public CProxy_IBaseEvents<CDerived>,
    public IDispatchImpl<IBase, &IID_IBase, &LIBID_ExampleLib
{
CDerivedLogic m_LogicObj;
};

Это достигает того, из чего Вы пытаетесь сделать с добавленным преимуществом

  1. Разделяет Вашу реальную логику программы от инфраструктуры / упаковывающий (COM)
  2. Делает реальную логику независимой от платформы.
  3. Будущий специалист по обслуживанию не должен понимать Ваш умный взлом COM
  4. Содержит Вашу логику программы в чистоте и далеко от синтаксиса COM, улучшая удобочитаемость
  5. Делает повторное использование реальной логики легче в других формах упаковки, например, как DLL C
1
ответ дан 5 December 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: