关于 CoCreateInstance() 方法实现的问题

Posted

技术标签:

【中文标题】关于 CoCreateInstance() 方法实现的问题【英文标题】:Question about CoCreateInstance() method's implementation 【发布时间】:2011-03-30 01:25:22 【问题描述】:

我有一个关于 CoCreateInstnace() 方法如何定位和创建包含在 COM DLL 中的 CoClass 实例的问题。

根据MSDN:

CoCreateInstance 函数提供 通过连接到一个方便的快捷方式 与关联的类对象 指定的 CLSID,创建一个 未初始化的实例,并释放 类对象。因此,它 封装了以下内容 功能:

CoGetClassObject(rclsid, dwClsContext, NULL, IID_IClassFactory, &pCF); 
hresult = pCF->CreateInstance(pUnkOuter, riid, ppvObj) 
pCF->Release(); 

所以我想知道这是否完全 CoCreateInstnace 是如何实现的?或者它只是一个逻辑等价物?如果它的实际实现不是这样,我完全不知道 CoCreateInstnace 是如何找到并创建一个仅在 Windows 注册表中注册的 CLSID 和一些 DLL 位置信息的正确 CoClass 的实例。

感谢您的回复。

【问题讨论】:

它做得更多,但这需要一本书。 究竟你觉得哪一部分像黑魔法? 【参考方案1】:

请在 Visual Studio IDE 中使用调试版本的 MSVCRT 库进行调试来检查它。或者,您可以扫描 VC++ 包含头文件

【讨论】:

以上是关于关于 CoCreateInstance() 方法实现的问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Avira 将“CoCreateInstance()”函数视为恶意软件?

在 VS 2012 中调用 CoCreateInstance 期间符号加载缓慢

在 COM 中:我应该在 CoCreateInstance 之后调用 AddRef 吗?

IWICImagingFactory 的 CoCreateInstance

CoCreateInstance 返回 E_INVALIDARG

CoCreateInstance 返回“类未注册”