Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не удаётся при помощи CoCreateInstance создать компонент / 2 сообщений из 2, страница 1 из 1
22.05.2015, 16:41
    #38966605
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаётся при помощи CoCreateInstance создать компонент
Доброго времени суток.

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

На данный момент функция ::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
22.05.2015, 22:47
    #38966857
Владимир2012
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаётся при помощи CoCreateInstance создать компонент
Ну как-то так:

Для 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
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не удаётся при помощи CoCreateInstance создать компонент / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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