首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >初始化com组件时使用构造函数

初始化com组件时使用构造函数
EN

Stack Overflow用户
提问于 2011-02-03 09:22:27
回答 5查看 583关注 0票数 2

我将尽可能简单地描述这个问题。

好了,问题来了;

假设我们有一个包含3个构造器的com组件类,其中一个构造器至少有两个参数。正如我们已经知道的,我们通过QueryInterface而不是调用类的构造函数来实例化组件,因此com客户端似乎不可能设置构造函数的参数。

好了,问题来了;

允许com客户端实例化至少需要初始化两个参数的com组件的最佳实用方法是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-02-03 10:42:38

您的QueryInterface调用可以返回工厂,而不是直接返回对象实例。例如,而不是:

代码语言:javascript
运行
复制
// implements IMyClass1 interface
return new MyClass1();

你会这样做:

代码语言:javascript
运行
复制
// 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实例。

票数 4
EN

Stack Overflow用户

发布于 2011-02-03 10:35:15

如果它是一个纯COM组件,处理这种情况的标准方法是实现Initialize(foo,bar)方法,而不是单独的构造函数,然后在COM实例化之后立即调用它。如果对象没有合理的默认状态,则可以使其成为COM对象中的成员变量(指针)。通过该COM对象,您将拥有Initialize(foo,bar)函数。在每个初始化函数中,对象正确版本将被实例化。COM包装中的每个传递函数都需要检查对象是否不为空,如果不为空,则返回适当的HRESULT。

票数 4
EN

Stack Overflow用户

发布于 2011-02-03 10:42:32

一种选择是使用工厂对象;创建函数将全部在(无状态)工厂对象上(当然,在不同的接口上),并传回实际对象的初始化实例。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4881810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档