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

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

05.01.2015, 21:13. Показов 2783. Ответов 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,893
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
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru