6 / 6 / 3
Регистрация: 05.11.2014
Сообщений: 67
1

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте, гуру 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...

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

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

Вот, например, есть такая DLL:
Код
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
07.01.2015, 00:26
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.01.2015, 00:26
Помогаю со студенческими работами здесь

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

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

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

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


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

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

Новые блоги и статьи
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
Как создавать приложения для iOS/iPhone
InfoMaster 12.01.2025
Введение в разработку iOS-приложений Разработка приложений для iOS открывает огромные возможности в мире мобильных технологий. С каждым годом количество пользователей iPhone и iPad растет,. . .
Как использовать Kotlin в Android разработке
InfoMaster 12.01.2025
Язык программирования Kotlin, разработанный компанией JetBrains, стал неотъемлемой частью современного мира Android-разработки. Первоначально представленный в 2011 году, Kotlin был официально. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru