2011-02-18 2 views
1

Здравствуйте Я создал COM видимого класса MyClass на C# зарегистрированного по команде Regasm - регистрация прошла OK И я могу видеть в реестре Progid, соответствующий MyClass В коде клиента C++: 1) вызов CLSIDFromProgID прошел OK 2) вызов CoCreateInstance с ошибкой «Класс не зарегистрирован» (80040154) Каковы могут быть возможные причины такого поведения - ваша помощь будет очень ценной Спасибо advanceCoCreateInstance неудачно с ошибкой «Класс не зарегистрирован» при использовании COM видена класс .NET

ответ

0

У меня была такая же проблема, решена выполнение этих команд с консоли:

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\regasm dllname.dll /tlb:dllname.tlb 
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\regasm dllname.dll /regfile 

затем сделайте двойной щелчок по файлу reg.

, чтобы проверить, все ли в порядке, вы можете иметь очень маленький файл VB Script, который создал объект, просто поместите команду, как это в .vbs файл:

SET testObj = CreateObject ("пространство имен. ClassName ")

Ваш COM видимый сборник должен быть сильно прост.

+0

Спасибо, что работает - в случае, если вы не используете сильное имя - вы также можете использовать/codebase flag –

0

Я просто хочу добавить, что проблема «класс не зарегистрирована» может произойти из-за того, что используется некорректная версия regasm. В состав платформы .NET входят 2 версии regasm.exe. Одна версия в пути «Framework», а другая в пути «Framework64».

На моей 64-битной машине я получил ошибку при использовании 32-разрядной regasm для регистрации DLL и попытался получить экземпляр из 64-разрядного C++ exe.

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