在同一台机器上创建对象时,CoCreateInstance() 和 CoGetClassObject() 有什么区别?

StackOverflow https://stackoverflow.com/questions/824907

据我了解,CoCreateInstance 会查找给定类 id 的 COM 服务器,为该 id 创建对象实例并从该对象实例检索接口。CoGetClassObject() 查找类 id 的 COM 服务器,为该类 id 创建类工厂的实例,并检索该类工厂接口,然后该接口可用于创建实际对象。

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

有帮助吗?

解决方案

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

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top