失败的 CoCreateInstance

Luc*_*ore 2 c++ com atl

我有一个函数,我在其中调用 CoCreateInstance。此函数被多次调用并且可以工作,但是有一次 CoCreateInstance 因“变量类型错误”错误而失败。问题是参数在成功和失败时总是相同的。什么可能导致这种情况发生?

Mer*_*avi 6

我的代码中还有一个函数调用 CoCreateInstance(...)。一次成功,另一次没有,无需更改代码。
但是查看返回的 HRESULT 时,结果是内存不足错误,“E_OUTOFMEMORY 内存不足”。我确实对这些主题进行了一些研究,并发现了导致这种情况发生的以下原因。

  1. 您必须首先调用 CoInitialize()

CoInitialize 函数必须在调用 CoCreateInstance 函数之前调用

  1. 错误的 COM 对象注册

当 COM 对象(或代理存根)未正确注册时,通常会发生这种情况。您可以使用 Oleview 工具通过尝试实例化对象来检查 COM 对象的注册。

Oleview.exe 包含在 Windows SDK 中,位置通常位于 C:\Program Files\Microsoft SDKs\Windows\v6.0\Bin。

如果它不存在,您可以尝试为 Windows Server 2008 安装 Microsoft Windows SDK:http : //www.microsoft.com/downloads/details.aspx ? FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&displaylang =en

注意:它不仅适用于 Windows 2008,它只是以最近的 Windows 版本命名,并且支持 Windows Server 2003;视窗服务器 2008;视窗Vista;视窗 XP。

  1. 不正确版本的 DLL 丢失、损坏

对我来说,这发生在不同的项目配置中,在调试模式下我捕获了异常但在发布中它没有出现。


Luc*_*ore 5

我修好了这个。该调用是从不同的线程进行的。当调用成功时,是从主线程调用的。失败时,源是另一个线程,并且不会事先调用 CoInitialize()。调用CoInitialize解决了这个问题。