CoCreateInstance失败

时间:2011-07-13 12:55:26

标签: c++ com atl

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

2 个答案:

答案 0 :(得分:2)

我的代码中也有一个函数调用CoCreateInstance(...)。当有一次它工作而另一次它没有,没有改变代码 但是当查看返回的HRESULT时,结果是一个Out of Memeory Error,“E_OUTOFMEMORY Ran out of memory。”我确实对这些主题进行了一些研究,发现了以下原因:

  1. 您必须先调用CoInitialize()
  2. 必须在调用CoCreateInstance函数

    之前调用CoInitialize函数
    1. COM对象注册不正确
    2. 当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; Windows Server 2008; Windows Vista; Windows XP。

      1. 丢失,损坏了不正确的DLL版本
      2. 对我来说,这是在不同的项目配置中发生的,在调试模式下我捕获了异常但在Release中它没有出现。

答案 1 :(得分:1)

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