Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
6 / 6 / 3
Регистрация: 05.11.2014
Сообщений: 67

COM out-of-process (ошибка: Класс не зарегистрирован)

05.01.2015, 21:13. Показов 2864. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, гуру COM`а!

Возникла проблема, к которой непонятно с какой стороны подойти...
Если кто-нибудь поможет – буду премного благодарна! =)


У меня есть программа Prog.exe.

Она представляет собой что-то типа БД.

Мне потребовалось программно создать в ней что-то.

Эта самая программа Prog.exe предоставляет свои API.

То есть, мне нужно написать клиент. Пишу:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#import "Prog.tlb"
 
В мэине:
 
if( SUCCEEDED(CoInitialize(NULL)) )
        std::cout<<"Ok!"<<std::endl;
 
ITProgApp  pIApp;
CString strErr;
 
try
{
    pIApp = ITProgApp(__uuidof(ITProgApp));
}
catch (_com_error er)
{
    const TCHAR * bb = er.ErrorMessage();
    strErr = bb;
}
std::cout<<"ITProgApp"<<std::endl;
std::cout << "Error: " << W2A(strErr) << std::endl;
Вижу ошибку:
Класс не зарегистрирован.

Далее что не делай с pIApp, будет ошибка, ибо он нулевой.


Дико расстраиваюсь, но пытаюсь разобраться.

Пишу свой простенький com-объект out-of-process, exe-шник то есть.
К нему пишу клиент – работает!

Долго роюсь в реестре – записи у моего mycom.exe и их Prog.exe одинаковые.
Регистрировала заново из командной строки, ничего не меняется.



Пробую с другой стороны подползти:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
HRESULT hr = OleInitialize(NULL);
IDispatchPtr pIDisp = NULL;
try
{
    pIDisp = IDispatchPtr(__uuidof(ITProgApp));
}
catch (_com_error er)
{
    const TCHAR * bb = er.ErrorMessage();
    strErr = bb;
}
std::cout<<"IDispatchPtr"<<std::endl;
std::cout << "Error: " << W2A(strErr) << std::endl;
Та же противная ошибка:
Класс не зарегистрирован.


Вопрос.
Что делать то?

В чем может быть ошибка?

Всем отозвавшимся спасибо! =)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.01.2015, 21:13
Ответы с готовыми решениями:

Ошибка Класс не зарегистрирован
Привет! В access при запуске макроса на одном из пк появляется ошибка класс не зарегестрирован, указывает на строку...

Ошибка при запуске программы: Класс не зарегистрирован
Всем привет. Проблема у меня в том, что при запуске программы на некоторых компьютерах программа не запускается и выдает ошибку : ...

Ошибка DCOM "Класс не зарегистрирован" как определить какой именно?
Тип события: Ошибка Источник события: DCOM Категория события: Отсутствует Код события: 10006 Дата: 18.08.04 Время: 8:55:59 ...

4
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
06.01.2015, 10:59
Цитата Сообщение от traktort Посмотреть сообщение
Далее что не делай с pIApp, будет ошибка, ибо он нулевой.
А CoCreateInstance где ?
0
6 / 6 / 3
Регистрация: 05.11.2014
Сообщений: 67
06.01.2015, 18:37  [ТС]
А CoCreateInstance где ?
Оно не надо )
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
06.01.2015, 19:19
Так не бывает.
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
07.01.2015, 00:26
Цитата Сообщение от traktort Посмотреть сообщение
Оно не надо
traktort, без CreateInstance не обойтись. Prog.exe корректно установлен в реестре?

Вот, например, есть такая DLL:
Code
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
CATSSALib; // CatSSA 1.0 Type Library
 
Dispatch _ICatMainEvents; // _ICatMainEvents Interface
GUID={DCC7935F-D623-4B3A-BDC1-9F5B4AA9FCF4};
 
Class CatMain; // CatMain Class
GUID={58308A9F-2462-489C-916A-9F421B8A9011};
  function QueryInterface(riid:^GUID; out ppvObj:^^void);
  function AddRef: UI4;
  function Release: UI4;
  function GetTypeInfoCount(out pctinfo:^UINT);
  function GetTypeInfo(itinfo:UINT; lcid:UI4; out pptinfo:^^void);
  function GetIDsOfNames(riid:^GUID; rgszNames:^^I1; cNames:UINT; lcid:UI4; out rgdispid:^I4);
  function Invoke(dispidMember:I4; riid:^GUID; lcid:UI4; wFlags:UI2; pdispparams:^DISPPARAMS; out pvarResult:^variant; out pexcepinfo:^EXCEPINFO; out puArgErr:^UINT);
  property-get SourceSeries: variant;
  property-put SourceSeries(^variant);
  function Decomposition(Lag:INT; Centr:I4; Prec:R8; CovarMatr:INT; SVDMethod:INT);
  property-get CorrFunc: variant;
  property-get EigenVals: variant;
  property-get EigenVecs: variant;
  property-get PrincipalComps: variant;
  function Reconstruction;
  property-put SelectedPC(Index:I4; I4);
  property-put SelectedAver(I4);
  property-get RecSeries: variant;
  function Forecast(Count:INT; Start:INT; Method:INT; AdjCentr:I4; UseInitial:I4);
  property-get ForecastSeries: variant;
  property-get PV: variant;
  property-get DisplayMessages: I4;
  property-put DisplayMessages(I4);
  property-get PeriodPairEV(Ind1:INT; Ind2:INT): R8;
  property-get PeriodPairPC(Ind1:INT; Ind2:INT): R8;
  property-get ForecastSeriesStart: variant;
 
Dispatch ICatMain; // ICatMain Interface
GUID={E0CA076A-4AE6-47D8-BF0C-FE9B3312924C};
  function QueryInterface(riid:^GUID; out ppvObj:^^void);
  function AddRef: UI4;
  function Release: UI4;
  function GetTypeInfoCount(out pctinfo:^UINT);
  function GetTypeInfo(itinfo:UINT; lcid:UI4; out pptinfo:^^void);
  function GetIDsOfNames(riid:^GUID; rgszNames:^^I1; cNames:UINT; lcid:UI4; out rgdispid:^I4);
  function Invoke(dispidMember:I4; riid:^GUID; lcid:UI4; wFlags:UI2; pdispparams:^DISPPARAMS; out pvarResult:^variant; out pexcepinfo:^EXCEPINFO; out puArgErr:^UINT);
  property-get SourceSeries: variant;
  property-put SourceSeries(^variant);
  function Decomposition(Lag:INT; Centr:I4; Prec:R8; CovarMatr:INT; SVDMethod:INT);
  property-get CorrFunc: variant;
  property-get EigenVals: variant;
  property-get EigenVecs: variant;
  property-get PrincipalComps: variant;
  function Reconstruction;
  property-put SelectedPC(Index:I4; I4);
  property-put SelectedAver(I4);
  property-get RecSeries: variant;
  function Forecast(Count:INT; Start:INT; Method:INT; AdjCentr:I4; UseInitial:I4);
  property-get ForecastSeries: variant;
  property-get PV: variant;
  property-get DisplayMessages: I4;
  property-put DisplayMessages(I4);
  property-get PeriodPairEV(Ind1:INT; Ind2:INT): R8;
  property-get PeriodPairPC(Ind1:INT; Ind2:INT): R8;
  property-get ForecastSeriesStart: variant;
На стороне С++ (у меня MSVC 2012) подключать и работать с ней так:
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
// ...
 
#import "CATSSALib.tlb"
 
// ...
 
bool doSomethingWithCom() {
    CoInitialize(NULL);
 
    // CATSSALib - неймспейс нашей .tlb
    // ICatMainPtr - это определение "умной" COM переменной
    //   на интерфейс ICatMain, т.е. что-то типа:
    //   typedef _com_ptr_t< _com_IIID<T, __uuidof(T)> > T##Ptr;
 
    CATSSALib::ICatMainPtr cat;
 
    // создаем по указанному UUID наш класс
 
    bool ok = false;
    if (FAILED(cat.CreateInstance(__uuidof(CATSSALib::CatMain)))) {
        // TODO: обработать данную ситуацию
        ok = false;
    } else {
        // далее, через operator-> работаем с созданным классом
 
        cat->put_DisplayMessages(1);
 
        // ...
 
        cat.Release();
        ok = true;
    }
 
    CoUninitialize();
 
    return ok;
}
 
//...
Если не поможет, то выкладывайте ваш Prog.exe.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.01.2015, 00:26
Помогаю со студенческими работами здесь

При попытке открыть видео, фото появляется ошибка "Класс не зарегистрирован"
Добрый день! При попытке открыть видио, фото появляется окно ,,Класс не зарегистрирован,, пробовал вставлять, по совету из инета, dll...

AvsVideoEditor и ошибка "Класс не зарегистрирован"
Я установил AvsVideoEditor. Но при запуске данной программы выдает ошибку: Класс не зарегистрирован,...

Не зарегистрирован класс. Какой класс и как его зарегистрировать?
Решил освоить ASP. Поставил на XP Prof IIS. Запускаю его. В inetpub/wwwroot кладу скриптец test.asp: &lt;HTML&gt; &lt;HEAD&gt; ...

Ошибка "Класс не зарегистрирован"
class MyDataBasePTO { ADOX._Catalog MyCatalog = new ADOX.Catalog();// Creem baza de date conform cerintelor ...

Ошибка "класс не зарегистрирован"
Всем привет! Подгрузил класс и новый компонент Map для работы с картой. На моём компьютере всё нормально работает, но если exe файл...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru