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

traktor

New member
05.01.2015
2
0
#1
Здравствуйте, гуру 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;
Та же противная ошибка:
Класс не зарегистрирован.


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

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

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