在一個小的測試項目,我有這樣的代碼:CoCreateInstance的 - 的COM +註冊表數據庫檢測到系統錯誤
HRESULT hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_ALL, __uuidof(IXMLDOMDocument), (void **) & m_pDoc);
if (hr != S_OK)
{
throw "MSXML DOM Document could not be created";
}
這編譯和運行流暢。在另一個項目中相同的代碼失敗:
HR = 0x80110474的COM +註冊表數據庫檢測到系統錯誤
兩個項目都是C++編譯使用Visual Studio 2010中我已經通過比較設置並排在兩個項目之間嘗試並確定可能導致此問題的差異。到目前爲止,我看不出爲什麼測試項目運行而另一個項目失敗。
編輯 - 全樣本代碼:
#include "stdafx.h"
#include <atlbase.h>
#include <atlconv.h>
#include "MsXml.h"
int _tmain(int argc, _TCHAR* argv[])
{
IXMLDOMDocument* m_pDoc = NULL;
if(FAILED(CoInitializeEx(0, COINIT_MULTITHREADED)))
if(FAILED(CoInitializeEx(0, COINIT_APARTMENTTHREADED)))
throw "Could not initialize COM";
HRESULT hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_ALL, __uuidof(IXMLDOMDocument), (void **) & m_pDoc);
if (hr != S_OK)
throw "MSXML DOM Document could not be created";
return 0;
}
你是如何註冊組件ID CLSID_DOMDocument的?你是如何在兩個項目中引用它的? – 2011-06-02 01:42:03
CLSID_DOMDocument是Microsoft的MSXML包的一部分。並使用其安裝程序進行安裝。 – FattyPotatoes 2011-06-02 01:51:11
這是Windows中的預裝組件,請務必不要自行安裝。爲什麼這會產生一個COM +錯誤,這在代碼片段中是無法猜測的。假設該機器上的註冊表狀態不佳可能是一個很好的猜測。 – 2011-06-02 02:20:32