Поиск:

Ответ в темуСоздание новой темы Создание опроса
> e_nointerface при вызове QueryInterface 
V
    Опции темы
lat
  Дата 29.7.2010, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 14.1.2008

Репутация: нет
Всего: 1



При вызове QueryInterface из win-service, функа возвращает e_nointerface.
IDE: visual studio 2005

Клиентский код:
Код

hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
...
    char*  szProgID = PROGID;
    WCHAR  szWideProgID[128];
    CLSID  clsid;
    long lLen = MultiByteToWideChar(CP_ACP,
        0,
        szProgID,
        strlen(szProgID),
        szWideProgID,
        sizeof(szWideProgID));

    szWideProgID[ lLen ] = '\0';
    HRESULT hr = ::CLSIDFromProgID(szWideProgID, &clsid);
    if (FAILED(hr))
    {
        LogErrMsg("Unable to get CLSID from ProgID.");
        return S_FALSE;
    }

    IClassFactory* pClassFactory;
    // Получить фабрику классов для класса SmartVistaDumpParser
    hr = CoGetClassObject(clsid,
        CLSCTX_INPROC,
        NULL,
        IID_IClassFactory,
        (void**)&pClassFactory);
    if ( FAILED( hr ))
    {
        LogErrMsg("Failed to GetClassObject server instance.");
        return S_FALSE;
    }

    // с помощью фабрики классов создать экземпляр
    // компонента и получить интерфейс IUnknown.
    IUnknown* pUnknown;
    hr = pClassFactory->CreateInstance(NULL, IID_IUnknown, (void**) &pUnknown);

    // Release the class factory
    pClassFactory->Release();

    if (FAILED(hr))
    {
        LogErrMsg("Failed to create server instance.");
        return S_FALSE;
    }
    
    ISmartVista* pISmartVista = NULL;
    hr = pUnknown->QueryInterface(IID_ISmartVista, (LPVOID*)&pISmartVista);    <--- error: e_nointerface
    pUnknown->Release();
    if (FAILED(hr))
    {
        LogErrMsg("QueryInterface() for SmartVista failed");
        return S_FALSE;
    }


COM сервер в виде DLL. Реализацию прикрепил к теме.

В тоже время при связке "консольный клиент и DLL в одном проекте" все работает нормально.

Это сообщение отредактировал(а) lat - 29.7.2010, 12:03

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  COMServer.zip 8,06 Kb
--------------------
Gott weiß ich will kein Engel sein
PM ICQ   Вверх
lat
Дата 29.7.2010, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 14.1.2008

Репутация: нет
Всего: 1



Вопрос снят. 
Потоковая модель была установлена не правильно. 
ThreadingModel set free и все заработало.
--------------------
Gott weiß ich will kein Engel sein
PM ICQ   Вверх
xvr
Дата 12.8.2010, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(lat @  29.7.2010,  18:01 Найти цитируемый пост)
Вопрос снят. 
Потоковая модель была установлена не правильно.
А так же видимо не собран (или не зарегистрирован) proxy/stub проект для этого сервера. Без него не будет работать DCOM и вообще любая активация, требующая маршалинга интерфейсов.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0424 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.