2012-03-26 18 views
0

私は以前にCOMまたはATLを使用していませんでしたが、今は両方を使用するコードに直面しています。次のコードでCreateInstanceを呼び出すと、_com_error.ErrorMessageによって認識されないHRESULTが返されます。つまり、エラー文字列は "不明なエラー:0x8876086c"です。 IClassFactoryインターフェイスが純粋な仮想関数CreateInstanceを宣言し、_AtlComModuleの型 'CAtlComModule'がCreateInstanceメンバ関数を持たないように、実際に呼び出される関数についてはちょっと混乱します。COMとATL型のインスタンス化

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; 
} 

ありがとうございます。

EDIT - これをリモートデバッグする機能がないため、デバッガを使用して機能に入ることはできません。

答えて

1

0x8876086cD3DERR_INVALIDCALLです。この問題の根底にある原因は、COMまたはATLではなく、Direct3Dに関連する可能性があります。これをさらにトラブルシューティングするには、このコードでCOMオブジェクトが正確に何が失敗しているかを確認するために、そこで使用しているCLSIDおよびIID引数を調べる必要があります。

関連する問題