8

我知道 CoCreateInstance 为给定的类 id 找到 COM 服务器,为该 id 创建对象实例并从该对象实例中检索接口。CoGetClassObject() 为类 id 找到 COM 服务器,为该类 id 创建类工厂的实例,并检索可用于创建实际对象的类工厂接口。

当用于在同一台机器上创建对象时,这些函数还有什么不同?它们的工作方式是否相同,但只会导致在完全相同的 COM 服务器中调用不同的代码?

4

2 回答 2

11

CoGetClassObject 本质上为您返回一个指向特定接口的工厂的指针。在底层,CoCreateInstance 使用 CoGetClassObject。调用 CoGetClassObject 的优点是,如果您想创建特定对象的许多实例,它允许您只需要创建一次类工厂。

CoGetClassObject 上的 MSDN 部分简要讨论了如何利用此功能。

于 2009-05-05T13:47:18.810 回答
1

除了 JaredPar 所说的之外,还有一个场景 - CoGetClassObject 返回一个类工厂(在 inproc 服务器的情况下调用 DLL 的 DLLGetClassObject 导出函数)。类工厂用于实例化 coclass。CoCreateInstance 在内部调用 CoGetClassObject,获取所需的类工厂,然后使用它来实例化您请求的 coclass。调用 CoCreateInstance 时,不能延迟创建 coclass。有时创建 coclass 的成本可能很高,您希望延迟它的创建,但仍然可以访问类工厂,以便您可以按需实例化 coclass。

于 2009-12-09T11:02:46.923 回答