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

标签 windows com interop com-interop

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

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

最佳答案

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

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

关于windows - 在同一台机器上创建对象时 CoCreateInstance() 和 CoGetClassObject() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/824907/

相关文章:

c# - 将 Microsoft.Office.Interop.Excel.Application 转换为 byte[]

c++ - CreateEvent 初始状态已发信号不是发信号事件

c - 为什么如果我禁用一个窗口,鼠标捕获会被释放,但如果我禁用其父窗口则不会释放鼠标捕获?

.net - 如何通过 COM 将未初始化的数组从 VB6 传递到 .NET?

.net - .NET 中是否有与 DCOM 相对应的可行方案?

c# - COM Interop 挂起会卡住整个 COM 系统。如何取消COM调用

java - 通过派生类访问Java中定义的静态内部类

C# - 如何在 Windows 64 位上获取程序文件 (x86)

python - 在防火墙后面时如何下载 python .egg 文件

c# - 将 C# 动态与 COM 对象一起使用会为已实现接口(interface)的记录方法抛出 RuntimeBinderException