C++ 实例化COM和ATL类型

C++ 实例化COM和ATL类型,c++,com,c++-cli,atl,C++,Com,C++ Cli,Atl,我以前从未使用过COM或ATL,但现在我面临着同时使用两者的代码。下面代码中对CreateInstance的调用返回一个HRESULT,该HRESULT未被_com_error.ErrorMessage识别,即错误字符串为“未知错误:0x8876086c”。不过,我对实际调用的函数有点困惑,因为IClassFactory接口只声明了一个纯虚拟函数CreateInstance,而_AtlComModule的类型“CAtlComModule”似乎没有CreateInstance成员函数 STDMET

我以前从未使用过COM或ATL,但现在我面临着同时使用两者的代码。下面代码中对CreateInstance的调用返回一个HRESULT,该HRESULT未被_com_error.ErrorMessage识别,即错误字符串为“未知错误: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;
}
STDMETHODIMP CGdtvEngine::CoCreateInstance(const CLSID&CLSID,const IID&IID,void**obj)
{
买方工厂;
HRESULT hr=ATLComoduleGetClassObject(&U ATLComodule,clsid,&U uuidof(工厂),(无效**)和工厂);
_通信错误err1(hr);
日志(_T(“AtlcomoduleGetClassObject的结果:%s”),err1.ErrorMessage();
hr=工厂->创建实例(空,iid,obj);
_通信错误err2(hr);
日志(_T(“工厂结果->创建实例:%s”),err2.ErrorMessage();
返回人力资源;
}
谢谢


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

0x8876086c
D3DERR\u INVALIDCALL
,因此问题的根本原因可能与Direct3D有关,而不是COM或ATL。要进一步解决此问题,您需要查看CLS您在那里使用的ID和IID参数,以便查看COM对象在这段代码中到底失败了什么