2012-02-06 3 views
1

Я получаю эту ошибку при запуске C# Windows Forms приложений:Получение COM фабрики классов для компонента с CLSID {} ​​не удалось

Retrieving the COM class factory for component with CLSID {} failed 
due to the following error: 80040154 Class not registered (Exception 
from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). 

Это появляется в IDE на 32-битной Windows XP. Компонент COM, о котором идет речь, является третьей стороной dll, которая определенно зарегистрирована на соответствующей машине. Мой проект нацелен на x86 ok. Я только получаю ошибку при создании экземпляра определенного класса компонента, другие классы, которые я использую, работают нормально.

Я пробовал с компонентом, просто добавленным непосредственно в качестве ссылки, а также создал сборку interop и ссылался на нее, но получил тот же результат. Незарегистрирован и перерегистрирован компонент с использованием regsvr32 безрезультатно.

Если я ссылаюсь на один и тот же компонент в приложении VB6 и создаю экземпляр одного класса, он отлично работает! Я полностью смущен, может ли кто-нибудь предложить какие-либо предложения, которые могли бы помочь мне ?!

спасибо.

+2

Ну, вы устранили очевидные причины. Осталось DLL Hell, используемая вами библиотека типов может не соответствовать фактическому установленному компоненту. Вы можете получить больше информации, запустив утилиту ProcMon от SysInternals. Вы увидите, что ваша программа ищет реестр для ключа CLSID. Вы можете посмотреть библиотеку типов непосредственно с помощью программы OleView.exe. Файл + Просмотр Typelib. Обычно вам нужна помощь от поставщика компонентов, чтобы разобраться в этом. –

ответ

1

я получил эту работу, изменяя инстанцировании линию от:

Component.MyObject test = new Component.MyObject(); 

в

Component.MyObject test; 

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