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

sha*_*oth 6 windows com interop com-interop

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

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

Jar*_*Par 11

CoGetClassObject实质上为您返回指向特定接口的工厂的指针.在引擎盖下,CoCreateInstance使用CoGetClassObject.调用CoGetClassObject的优点是,如果要创建特定对象的许多实例,它只允许您创建一次类工厂.

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