• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Com Out-of-process (ошибка: Класс Не Зарегистрирован)

  • Автор темы traktor
  • Дата начала
T

traktor

Здравствуйте, гуру COM`а!

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


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

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

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

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

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

C++:
#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++:
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;

Та же противная ошибка:
Класс не зарегистрирован.


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

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

Всем отозвавшимся спасибо! =)
 
М

Махыч

Интересный сайт :
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!