【发布时间】:2011-02-20 01:58:45
【问题描述】:
在 COM 中,当你想创建某个 COM Server 对象的实例时,是否首先需要获取指向它的 IUnknown 接口的指针,然后才能使用 CoGetClassObject 创建一个类对象?
据我了解,IUnknown 是用来管理对象生命周期的,所以据我了解,无论客户端想要创建什么对象,首先需要一个指向它的 IUnknown 接口实现的指针。
听起来正确吗?如果没有,谁能告诉我它是如何工作的?
【问题讨论】:
在 COM 中,当你想创建某个 COM Server 对象的实例时,是否首先需要获取指向它的 IUnknown 接口的指针,然后才能使用 CoGetClassObject 创建一个类对象?
据我了解,IUnknown 是用来管理对象生命周期的,所以据我了解,无论客户端想要创建什么对象,首先需要一个指向它的 IUnknown 接口实现的指针。
听起来正确吗?如果没有,谁能告诉我它是如何工作的?
【问题讨论】:
IUnknown 管理现有 COM 对象的生命周期。在对象创建之前,没有IUnknown指针可言。
CoGetClassObject 用于获取预期创建感兴趣对象的对象的IUnknown 接口。即,它是一个对象factory,通常实现IClassFactory,它声明了用于创建对象的CreateInstance方法。
与其显式使用类工厂,不如直接调用CoCreateInstance 更简单。
【讨论】:
IUnknown。该接口本身并不是很有用,但它声明了QueryInterface 方法,可以让您发现对象支持的其他接口。
IUnknown 本身就很有用,因为它有助于跟踪对象的生命周期。