0 / 0 / 0
Регистрация: 27.09.2006
Сообщений: 20
1

Использование COM объекта

22.10.2014, 18:16. Показов 5985. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Обращаюсь первый раз))
С COM дел пока не имел.
Есть проблема, необходимо использовать COM-интерфейс IX509CertificateRequest что описан в CertEnroll.dll.
Нагуглил кучу информации по поводу как вообще программировать и использовать com-объекты, но что-то я не так делаю по всей видимости...

Есть вот такой код:

C++
1
2
3
4
5
6
7
8
9
//Инициализация COM
            if(FAILED(CoInitialize(NULL))) cout<<"Fail Initialize COM!!!";
    
            //Указатель на интерфейс
            IX509CertificateRequest* p_ix509;
 
            HRESULT hr;
 
            hr = CoCreateInstance(IID_IX509CertificateRequest, NULL, CLSCTX_SERVER, IID_IX509CertificateRequest, (void**) &p_ix509);
Возникает ошибка: Error 1 error LNK2001: unresolved external symbol _IID_IX509CertificateRequest D:\ProjectCpp\Test_4\Test_4\Test_4.obj Test_4

Что делать?
Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2014, 18:16
Ответы с готовыми решениями:

Использование COM объекта (c#) в sql
Создал на c# COM объект using System; using System.Collections.Generic; using System.Linq;...

Использование объекта Array
Используя объект Array, создать массив случайных чисел.

Использование объекта класса
В основном файле объявлен объект класса. При нажатии на кнопку должен вызываться метод класса для...

Использование объекта ListBox
Всем привет. Где можно прочитать инфу по параметрам этого элемента? Как сделать проверку в...

6
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.10.2014, 19:47 2
Подключите следующий файл:
C++
1
#include <initguid.h>
0
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,413
22.10.2014, 20:06 3
вам нужно использовать директиву #include с заголовочным файлом содержащим ваши интерфейсы и прочие символы например
C++
1
#include "opchda.h"
либо использовать директиву #import если ваша среда позволяет подключать объекты напрямую (например MSVC++) например
C++
1
#import "c:\program files\common files\system\ado\msadox.dll"
не исключено что еще потребуются магические продолжения этой строки вида rename("EOF", "EndOfFile") или no_namespace
0
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.10.2014, 20:46 4
Лучший ответ Сообщение было отмечено KerLaeda как решение

Решение

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
#include <Windows.h>
#include <stdio.h>
#include <certenroll.h>
 
int main()
{
    CoInitialize(NULL);
 
    IX509CertificateRequest * pCertReq;
 
    HRESULT const Status = CoCreateInstance(
        __uuidof(CX509CertificateRequestPkcs10),
        NULL,
        CLSCTX_SERVER,
        __uuidof(IX509CertificateRequest),
        reinterpret_cast<void **>(&pCertReq)
        );
 
    if (FAILED(Status))
    {
        printf("CoCreateInstance failed with status 0x%.8lx.\r\n", Status);
    }
 
    else
    {
        printf("OK!\r\n");
        pCertReq->Release();
    }
 
    CoUninitialize();
 
    return EXIT_SUCCESS;
}
> OK!
(Visual Studio 2010).
1
0 / 0 / 0
Регистрация: 27.09.2006
Сообщений: 20
23.10.2014, 17:49  [ТС] 5
Убежденный! Спасибо, заработало)) вот только можно вопросик, почему в функции CoCreateInstance первый параметр CX509CertificateRequestPkcs10?

Теперь осталось разобраться как вообще этим пользоваться...
0
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,413
23.10.2014, 18:50 6
Цитата Сообщение от KerLaeda Посмотреть сообщение
почему
наверное потому что это идентификатор класса
0
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
23.10.2014, 19:27 7
Лучший ответ Сообщение было отмечено KerLaeda как решение

Решение

Цитата Сообщение от KerLaeda Посмотреть сообщение
почему в функции CoCreateInstance первый параметр CX509CertificateRequestPkcs10?
CoCreateInstance принимает два идентификатора - CLSID и IID.
CLSID - это идентификатор класса, т.е. фактически это ID COM-класса,
который вы хотите создать, он уникален. IID - это идентификатор
интерфейса через который вы хотите работать с объектом.
Например IUnknown, IPersistStream и т.д.

Разные COM-классы могут поддерживать одни и те же интерфейсы.
Но при этом не может быть двух COM-классов с одинаковыми CLSID.
Как-то так.
1
23.10.2014, 19:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2014, 19:27
Помогаю со студенческими работами здесь

Использование объекта из другого потока
Приветствую, граждане. Не являюсь программистом и не собираюсь им становиться. Лишь ИЗРЕДКА что-то...

Использование переменной в методе COM объекта
Есть SQL-подобная база, доступ к базе возможен только через COM интерфейс. Реализован следующий...

Использование объекта Timer в Delphi
Как можно изменить вот этот код чтобы у меня в Label1 был как бы счет времени формата 00:00:00...

HTML + JavaScript. Использование объекта Date
Создать одномерный массив действительных чисел, определить минимальное значение массива и поменять...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru