Наша кодовая база имеет много COM-объектов, поэтому обычно у нас будет что-то вроде:
//this is the IDL-generated IGetTime interface header
#include "gettime.h"
//our COM class implementation of IGetTime
class CGetTime : public IGetTime
{
public:
CGetTime(CGetTimeCF &factory,...); //COM-specific constructor params
/* IUnknown */
STDMETHODIMP QueryInterface(REFIID riid, LPVOID FAR * ppv);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
/* IGetTime */
STDMETHODIMP GetTheTime(); //
};
Способ, которым настроен конструктор и несколько других вещей, этот класс очень легкоможно использовать через COM ... вы можете взломать способ создания объекта, но он, как правило, ненадежен.Во многих случаях, однако, фактическая функциональность класса могла бы быть использована без COM ... и это также было бы легче проверить, если бы вы могли сделать new CGetTime();
.:
class CGetTimeBase
{
public:
STDMETHODIMP GetTheTime();
};
class CGetTime : public IGetTime, public CGetTimeBase
{
...
};
Является ли это хорошим подходом, или есть лучший способ иметь класс 'plain C ++', обеспечивающий базовую функциональность, и класс COM, выполняющий работу с COM?Я думаю, что для минимизации количества кода, который я пишу, я бы предпочел не вводить методы-обертки, но иметь фактический метод реализации в не-COM-классе, поэтому он автоматически присутствует в COM-классе.
Мысли?};