我将尽可能简单地描述这个问题。
好了,问题来了;
假设我们有一个包含3个构造器的com组件类,其中一个构造器至少有两个参数。正如我们已经知道的,我们通过QueryInterface而不是调用类的构造函数来实例化组件,因此com客户端似乎不可能设置构造函数的参数。
好了,问题来了;
允许com客户端实例化至少需要初始化两个参数的com组件的最佳实用方法是什么?
发布于 2011-02-03 10:42:38
您的QueryInterface
调用可以返回工厂,而不是直接返回对象实例。例如,而不是:
// implements IMyClass1 interface
return new MyClass1();
你会这样做:
// pointer to member that implements IMyClassFactory interface
return &m_myClassFactory;
// this could also be a static class instead of an object instance
IMyClassFactory
接口将有一个create
方法,该方法接受构造函数参数并返回最终的MyClass1
实例。
发布于 2011-02-03 10:35:15
如果它是一个纯COM组件,处理这种情况的标准方法是实现Initialize(foo,bar)方法,而不是单独的构造函数,然后在COM实例化之后立即调用它。如果对象没有合理的默认状态,则可以使其成为COM对象中的成员变量(指针)。通过该COM对象,您将拥有Initialize(foo,bar)函数。在每个初始化函数中,对象正确版本将被实例化。COM包装中的每个传递函数都需要检查对象是否不为空,如果不为空,则返回适当的HRESULT。
发布于 2011-02-03 10:42:32
一种选择是使用工厂对象;创建函数将全部在(无状态)工厂对象上(当然,在不同的接口上),并传回实际对象的初始化实例。
https://stackoverflow.com/questions/4881810
复制相似问题