Пример приложения ActiveQt Com - COM-сервер не зарегистрирован в реестре Windows (Qt4.7.4) - PullRequest
1 голос
/ 15 декабря 2011

В настоящее время я пытаюсь использовать пример проекта Com App, который предоставляется вместе с установкой Qt (Qt_folder \ examples \ 4.7 \ activeqt \ comapp)

Я использую версию 4.7.4 для Windows, Qt Creator 2.3.0 и компилятор MinGw.

Таким образом, пример проекта компилируется и работает нормально, но кажется, что информация о COM-сервере не зарегистрирована в реестре, потому что я не могу получить доступ к нему из каких-либо сценариев, и я также не могу найти UID в реестре, что означает, что COM-сервер не зарегистрирован.

Я пытаюсь найти решение 3 дня назад, и я начинаю впадать в отчаяние. Любая помощь приветствуется.

p.s. Извините за мой английский, это не мой родной язык

Ответы [ 2 ]

0 голосов
/ 11 июля 2012

Кажется, единственный способ заставить COM-интерфейс работать должным образом - это компилировать из VS с помощью надстройки Qt VS.Это работает для меня, я использовал Visual Studio 2008. См. Этот пост: Сборка приложений ActiveQt (COM) с MinGW

Но в любом случае это не решает проблему, так как необходимо иметь MicrosoftЛицензия VS на возможность компилировать программное обеспечение Qt с использованием интерфейса COM.(Надстройка VS не совместима с версиями VS Express)

Спасибо всем за помощь.

0 голосов
/ 03 июля 2012

Не уверен, что Qt позаботится об этом, но вы уверены, что ваш поток инициализируется для COM, вызывая CoInitializeEx?

Я использовал некоторые COM и Qt на работе, и это иногда что-то упускается из виду.

Функция CoInitializeEx

Вот пример использования функции.

MyClass::MyClass()
{
    // Make this call before attempting to access COM.
    if( SUCCEEDED( CoInitializeEx( 0, COINIT_APARTMENTTHREADED ) ) )
    {
         // This single thread has been initialized for COM usage.
         // Alternatively you can use COINIT_MULTITHREADED instead
         // of COINIT_APARTMENTTHREADED if you require threaded
         // support.
    }
    else
    {
         // Failed, still must call uninitialize.
         CoUninitialize();
    }
}

MyClass::~MyClass()
{
    CoUninitialize();
}
...