powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не удаётся при помощи CoCreateInstance создать компонент
2 сообщений из 2, страница 1 из 1
Не удаётся при помощи CoCreateInstance создать компонент
    #38966605
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.

Разбираюсь с тем, как в реестре регистрировать свои компоненты и затем, на основании этой регистрационной информации создавать их на стороне клиента.

На данный момент функция ::CoCreateInstance в результате даёт сообщение: Class not registered. Пытаюсь разобраться, что сделал неверно:

Код: plaintext
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.
...
// Идентификатор моей DLL (он же зарегистрирован и в реестре (см. reg-файл):
// {68584B56-9224-4DCC-AD35-1070CC9B8FDE}
static const CLSID CLSID_component_01 =
{ 0x68584b56, 0x9224, 0x4dcc, { 0xad, 0x35, 0x10, 0x70, 0xcc, 0x9b, 0x8f, 0xde } };

// Идентификатор моего интерфейса
// {EB4BFC91-6A6E-43D1-B4CD-7A5DF24DB8D8}
static const IID IID_IX =
{ 0xeb4bfc91, 0x6a6e, 0x43d1, { 0xb4, 0xcd, 0x7a, 0x5d, 0xf2, 0x4d, 0xb8, 0xd8 } };
...

// Код на стороне клиента:

 ::CoInitialize(nullptr);

  IUnknown* comp = nullptr;
  HRESULT hcri = ::CoCreateInstance(CLSID_component_01, nullptr, 
    CLSCTX_INPROC_SERVER, IID_IX, (void**)&comp);

  if (FAILED(hcri)){
    void* msg = nullptr;
    ::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
      nullptr, hcri, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&msg, 0,
      nullptr);
    trace("***** TRACE *****");
    trace((LPTSTR)msg);
    trace("****************");
    keep_window_open();
    return 1;
  }

// В итоге ::FormatMessage выводит текст: Class not registered



В реестр предварительно вносил следующие изменения:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{68584B56-9224-4DCC-AD35-1070CC9B8FDE}]
@="bush_component_01"

[HKEY_CLASSES_ROOT\CLSID\{68584B56-9224-4DCC-AD35-1070CC9B8FDE}\InprocServer32]
@="D:\\projects\\com_sandbox_solution_01\\Debug\\bush_component_01.dll"

[HKEY_CLASSES_ROOT\CLSID\{EB4BFC91-6A6E-43D1-B4CD-7A5DF24DB8D8}]
@="IID_IX"

[HKEY_CLASSES_ROOT\CLSID\{EB4BFC91-6A6E-43D1-B4CD-7A5DF24DB8D8}\InprocServer32]
@="D:\\projects\\com_sandbox_solution_01\\Debug\\bush_component_01.dll"



Не могу пока понять, что сделал неправильно.
...
Рейтинг: 0 / 0
Не удаётся при помощи CoCreateInstance создать компонент
    #38966857
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну как-то так:

Для server 32:
----------------------


Windows Registry Editor Version 5.00

; Данные об компоненте
;
[HKEY_CLASSES_ROOT\ExCOM01.Component]
@="ExCOM01.Component Class"

[HKEY_CLASSES_ROOT\ExCOM01.Component\CLSID]
@="{FAF7653C-BFDC-4D7D-A836-F534D1974733}"

[HKEY_CLASSES_ROOT\ExCOM01.Component\CurVer]
@="ExCOM01.Component.1"

; Данные об классе
;
[HKEY_CLASSES_ROOT\CLSID\{FAF7653C-BFDC-4D7D-A836-F534D1974733}]
@="ExCOM01.Component Class"

[HKEY_CLASSES_ROOT\CLSID\{FAF7653C-BFDC-4D7D-A836-F534D1974733}\InprocServer32]
@="F:\\-- C\\-- Projects VC COM\\Touch COM\\-- Step 01\\ExCOM01\\Debug\\ExCOM01.dll"
"ThreadingModel"="Apartment"

[HKEY_CLASSES_ROOT\CLSID\{FAF7653C-BFDC-4D7D-A836-F534D1974733}\ProgID]
@="ExCOM01.Component.1"

[HKEY_CLASSES_ROOT\CLSID\{FAF7653C-BFDC-4D7D-A836-F534D1974733}\TypeLib]
@=""

[HKEY_CLASSES_ROOT\CLSID\{FAF7653C-BFDC-4D7D-A836-F534D1974733}\VersionIndependentProgID]
@="ExCOM01.Component"

Для server 64:
----------------------

Windows Registry Editor Version 5.00

; Данные об компоненте
;
[HKEY_CLASSES_ROOT\ExCOM01.Component]
@="ExCOM01.Component Class"

[HKEY_CLASSES_ROOT\ExCOM01.Component\CLSID]
@="{FAF7653C-BFDC-4D7D-A836-F534D1974733}"

[HKEY_CLASSES_ROOT\ExCOM01.Component\CurVer]
@="ExCOM01.Component.1"

; Данные об классе
;
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{FAF7653C-BFDC-4D7D-A836-F534D1974733}]
@="ExCOM01.Component Class"

[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{FAF7653C-BFDC-4D7D-A836-F534D1974733}\InprocServer32]
@="F:\\-- C\\-- Projects VC COM\\Touch COM\\-- Step 01\\ExCOM01\\Debug\\ExCOM01.dll"
"ThreadingModel"="Apartment"

[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{FAF7653C-BFDC-4D7D-A836-F534D1974733}\ProgID]
@="ExCOM01.Component.1"

[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{FAF7653C-BFDC-4D7D-A836-F534D1974733}\TypeLib]
@=""

[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{FAF7653C-BFDC-4D7D-A836-F534D1974733}\VersionIndependentProgID]
@="ExCOM01.Component"
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не удаётся при помощи CoCreateInstance создать компонент
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]