c++ - CoCreateInstance 失败

标签 c++ com atl

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

最佳答案

我的代码中还有一个调用 CoCreateInstance(...) 的函数。在不更改代码的情况下,一次成功,另一次失败。
但是当查看返回的 HRESULT 时,结果是内存不足错误,“E_OUTOFMEMORY 内存不足。”我确实做了一些关于这些主题的研究,发现可能发生这种情况的原因如下。

  1. 您必须先调用 CoInitialize()

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

  1. 不正确的 COM 对象注册

当 COM 对象(或代理 stub )未正确注册时,通常会发生这种情况。您可以通过尝试实例化对象来使用 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; Windows 服务器 2008; Windows Vista; Windows XP。

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

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

关于c++ - CoCreateInstance 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6679221/

相关文章:

c++ - 如何在 C++ 中使用 waitformultipleobjects

.net - 从具有不同 GUID 的 .Net 引用 COM+

c# - Excel COM 互操作 - 为什么返回类型通常是动态的?

c++ - 在哪里放置 ATL COM 对象的析构函数代码?

c++ - 是否可以同时调试 VB6 和 C++ COM dll?

c - 如何改变ATL控件的默认宽高?

c++ - 使用{}初始化类(class)成员

c++ - boost::geometry::distance 使用 3D 基元编译错误

c++ - cpp.react 库的 C++ 源代码中出现奇怪的 "->* []"表达式

c++ - DirectShow 示例过滤器 : How to Use?