Форум программистов, компьютерный форум, киберфорум
C++: COM, OLE, ActiveX
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
1 / 1 / 1
Регистрация: 06.03.2016
Сообщений: 64
1

FAILED(CoInitialize) и FAILED(CoGetClassObject) возвращают TRUE

04.11.2018, 20:40. Просмотров 2372. Ответов 2

Добрый день. Начал изучать COM и столкнулся со следующей проблемой.
Необходимо, чтобы функция, экспортируемая из DLL, возвращала интерфейсное значение.
Однако CoInitialize и CoGetClassObject возвращают HResult < 0. Не могу понять, почему так происходит.

Код ниже при попытке вызова данной функции выводит "!!!!!!" и естественно ошибку.
На возвращаемые значения можете не смотреть, это для тестов.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
extern "C" _declspec(dllexport) IMath* __stdcall GetInterface()
{
    if (FAILED(CoInitialize(NULL))) {
        std::cout << "!!!";                                                     // <- Выводится
    }
 
    char* szProgID = "Math.Component.1";
    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))
        return nullptr;
 
    IClassFactory* pCF;
    hr = CoGetClassObject(clsid,
        CLSCTX_INPROC,
        NULL,
        IID_IClassFactory,
        (void**)&pCF);
    if (FAILED(hr))
        std::cout << "!!!";                                                       // <- Выводится
 
    IUnknown* pUnk;
    hr = pCF->CreateInstance(NULL, IID_IUnknown, (void**)&pUnk);
 
    pCF->Release();
 
    if (FAILED(hr))
        return nullptr;
 
    IMath* pMath = NULL;
    hr = pUnk->QueryInterface(IID_IMath, (LPVOID*)&pMath);
    pUnk->Release();
    if (FAILED(hr))
        return nullptr;
 
    return nullptr;
}
Добавлено через 14 минут
Я изменил
C#
1
CoInitialize(NULL)
на
C#
1
CoInitializeEx(NULL, COINIT_MULTITHREADED)
Вроде бы нормально, но функция CoGetClassObject все равно возвращает не то, что нужно.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.11.2018, 20:40
Ответы с готовыми решениями:

Ошибка file_get_contents failed to open stream: HTTP request failed
Внимание! В этом коде нет смысла и нет морали, поэтому если вы этого не ожидали читаем ниже: ...

Не устанавливается ни один плагин ошибка Installation failed: Download failed. No working transports found
Здраствуйте! Помогите пофиксить ошибку, при попытке установки нового плагина(любого), в админке...

Failed to open stream: HTTP request failed!
Warning:...

Failed: Id Upload To Notes Id Vault Failed
Уважаемые, при попытке зарегистрировать пользователя выдает следующую ошибку FAILED: ID upload to...

2
Модератор
3326 / 2111 / 339
Регистрация: 13.01.2012
Сообщений: 8,202
05.11.2018, 15:15 2
WhiscasH, покажите что именно за результат возвращается. интерфейс фабрики вообще реализован там откуда вы его просите?
0
COM‐пропагандист
490 / 424 / 101
Регистрация: 18.12.2014
Сообщений: 973
Записей в блоге: 2
29.06.2020, 01:05 3
Я правильно понимаю, что CoInitialize() вы вызываете внутри DLL? Не делайте так, этим должен заниматься процесс, загружающий DLL.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2020, 01:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Devel Studio. Ошибка "failed to open stream: HTTP request failed!" при использовании file_get_contents()
Начал писать в девел студио фейк и возникает проблемма со скриптом, я без понятия что не так,...

Warning: file_get_contents(...) failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized
&lt;?class VK_Auth{ //ID приложения private $vk_app_id; //Защищенный ключ private...

Overclocking failed or overvoltage failed
Компьютер перестал включатся, испортился блок питания (на 250W, основное питание на 20 разъемов), ...

Overclocking failed or overvoltage failed
Работал себе компьютер и завис. После перезагрузки перестал включаться, только пищит. Один раз...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.