CoCreateInstance - база данных реестра COM + обнаружила системную ошибку - PullRequest
1 голос
/ 02 июня 2011

В небольшом тестовом проекте у меня есть этот код:

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

Ответы [ 2 ]

1 голос
/ 03 июня 2011

Нашел решение, хотя и не идеальное, но решил проблему. Я создал новый проект и вручную импортировал настройки.

0 голосов
/ 23 марта 2015

У меня та же проблема с Turbo Delphi: тот же код с CoCreateInstance () работает в одном проекте и не работает в другом с HR = 80110474 (COMADMIN_E_REGDB_SYSTEMERR). Это было вызвано переопределением переменных среды IDE, которые хранятся в настройках проекта. Таким образом, происходит сбой только при запуске в среде IDE (независимо от состояния отладки). Очистка настроек проекта решает проблему.

...