• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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;

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


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

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

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

Махыч

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

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