【问题标题】:Instantiating a COM and ATL type实例化 COM 和 ATL 类型
【发布时间】:2012-04-10 03:15:44
【问题描述】:

我以前从未使用过 COM 或 ATL,但现在我遇到了同时使用两者的代码。下面代码中对 CreateInstance 的调用返回一个 HRESULT,_com_error.ErrorMessage 无法识别该 HRESULT,即错误字符串为“未知错误:0x8876086c”。不过,我对实际调用的函数有点困惑,因为 IClassFactory 接口只是声明了一个纯虚函数 CreateInstance,而 _AtlComModule 的类型“CAtlComModule”似乎没有 CreateInstance 成员函数。

STDMETHODIMP CGdtvEngine::CoCreateInstance(const CLSID &clsid, const IID &iid, void **obj)
{
    CComPtr <IClassFactory> factory;
    HRESULT hr = AtlComModuleGetClassObject(&_AtlComModule, clsid, __uuidof(factory), (void **)&factory);
    _com_error err1(hr);
    Log(_T("Result of AtlComModuleGetClassObject: %s"), err1.ErrorMessage();
    hr = factory->CreateInstance(NULL, iid, obj);
    _com_error err2(hr);
    Log(_T("Result of factory->CreateInstance: %s"), err2.ErrorMessage() );
    return hr;
}

谢谢。

编辑 - 我应该补充一下,因为我没有远程调试的能力,所以我不能只使用调试器进入函数。

【问题讨论】:

    标签: c++ com c++-cli atl


    【解决方案1】:

    0x8876086cD3DERR_INVALIDCALL,因此问题的根本原因可能与 Direct3D 相关,而不是 COM 或 ATL。要进一步解决此问题,您需要查看您在此处使用的 CLSID 和 IID 参数,以便了解该代码导致 COM 对象失败的确切原因。

    【讨论】:

      猜你喜欢
      • 2011-06-25
      • 1970-01-01
      • 2012-07-04
      • 2019-03-13
      • 1970-01-01
      • 2018-12-19
      • 2010-12-16
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多