Pritish Dahivelkar Ответов: 1

0040154 класс не зарегистрирован (исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))


У меня есть idl-файл в моем проекте c++, и я хочу создать экземпляр для coclass из этого idl-файла в моем втором проекте, который я создал в c#.

при создании этого экземпляра в проекте c# я получаю исключение во время выполнения.

Я ищу решение для исключения и в основном получаю, что я должен установить платформу сборки на 32 бит.

Что я уже пробовал:

Цитата:
Я попробовал это сделать и скомпилировал оба своих проекта в 32-битном формате, но все равно получил одно и то же исключение. Кроме того, когда я компилирую оба проекта на 64-битной платформе, все равно получаю одно и то же исключение.

Кроме того, я зарегистрировал свою библиотеку dll c++ с помощью regsrv32, и ее запись добавлена в реестр под 64-битной версией.

Я создал отдельный проект ATL на языке C++ и попытался создать экземпляр кокласса на языке c#. Эта работа для меня работает как в 32-битной, так и в 64-битной версии. Для проекта ATL я не запускал никакой команды для регистрации dll, я думаю, что visual studio сделала это за меня. Но для моего существующего проекта non ATL я не могу создать экземпляр com-класса c++ в c#.

Richard Deeming

Если библиотека dll C++ является 64-разрядной и зарегистрирована в 64-разрядном реестре, то приложение C# также должно быть настроено на 64-разрядную версию.

1 Ответов

Рейтинг:
0

KarstenK

Проверьте, находится ли приложение C+ в 32-или 64-разрядном режиме. Есть некоторые настройки, чтобы контролировать его.

При работе с 32-и 64-битными библиотеками DLL имена и пути должны быть разными, чтобы система не совпадала с модулями. Проверьте, что необходимые боковые загруженные библиотеки DLL являются правильными и на месте.

В проектах ATL Регистрация представляет собой пакет в стандартном процессе сборки, поскольку мастер проекта добавил его.

Как бы глупо это ни звучало: коды ошибок-это лучший намек на то, что не так, проблема в том, чтобы их интерпретировать ;-)