我们的代码库中有很多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
{
...
};
这是一个很好的方法,还是有一个更好的方法让一个“普通C++”类提供核心功能,一个COM类做COM的东西?为了尽量减少要写的代码量,我认为我不想引入包装方法,而是在非COM类中使用实际的实现方法,这样它就会自动出现在COM类中。
思想?
};