gpt4 book ai didi

c++ - 实例化 COM 和 ATL 类型

转载 作者:行者123 更新时间:2023-11-28 08:07:49 24 4
gpt4 key购买 nike

我以前从未使用过 COM 或 ATL,但现在我遇到了同时使用这两者的代码。在下面的代码中调用 CreateInstance 会返回一个 HRESULT,它不能被 _com_error.ErrorMessage 识别,即错误字符串是“未知错误:0x8876086c”。不过,我对实际调用的函数有点困惑,因为 IClassFactory 接口(interface)只是声明了一个纯虚函数 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;
}

谢谢。

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

最佳答案

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

关于c++ - 实例化 COM 和 ATL 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9875164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com