2013-05-22 2 views
0

У меня есть некоторые проблемы с вызовом COM-объекта.
HRESULT: 0x80040154 для зарегистрированного объекта COM

szProgID = Imctrl.Section 
HRESULT hr = CLSIDFromProgID(szProgID, &clsid); 

После выполнения, ч = S_OK, CLSID = "CLSID_Section класс".
Но когда я пытаюсь создать объект, CoCreateInstance возвратил ошибку: «Класс не зарегистрирован». Хотя «Imctr.Section» существует в реестре.

hr = ::CoCreateInstance(clsid, pUnkOuter, dwClsContext, __uuidof(T), (void**)&p); 

Такая же ошибка для других кладок из этой DLL.

+1

Возможно, 32-разрядная версия 64-разрядной версии? COM-сервер и COM-клиент должны использовать одну и ту же битту (в общем) –

+0

'Imctrl.Section' в реестре только для карт CLSID, тогда CLSID сопоставляет фактическую реализацию сервера, а затем он должен существовать вообще. В целом, это либо проблема с вашей стороны, пытающаяся создать неверную вещь, либо сервер не просто зарегистрирован/доступен (включая вероятную причину 32/64). –

ответ

0

Проблема не была связана с 32-битным и 64-разрядным.
Использование служебного программного обеспечения «depends.exe« Я нашел эти DLL-зависимости с некоторыми сторонними DLL, которые не позволяли получить доступ к объекту.

Смежные вопросы