Как «сгладить» C ++ COM DLL для стандартных экспортируемых методов? (Потребляется c #) - PullRequest
1 голос
/ 03 февраля 2012

У нас есть собственный код библиотеки C ++ COM. В настоящее время мы используем библиотеку из приложения на C #. Работает нормально.

Однако регистрация и отмена регистрации COM-объектов утомительна и становится проблемой для пользователей, переходящих на win7 из-за необходимости запуска регистрации с правами администратора (это невозможно напрямую из нашего приложения Click-Once).

Итак ... Так как у нас действительно нет причин использовать библиотеку через COM (по историческим причинам она закодирована как COM), мы бы хотели перейти к простому раскрытию методов как «простого экспорта».

Первая попытка была просто разоблачить методы рядом с классами COM. Хорошо смотрится через соответствующие инструменты для проверки DLL.

Теперь, когда я удаляю ссылку COM в VS и включаю dll, просто «просматривая» в диалоге добавления ссылки, она все равно обрабатывается как объект COM, и dll не включается в вывод, как я ожидал.

Является ли «незаконным» использование библиотеки COM в качестве простой библиотеки DLL? Как лучше всего решить эту проблему?

Спасибо за любой вклад!

Андерс, Дания

Ответы [ 3 ]

4 голосов
/ 03 февраля 2012

Вы не можете использовать диалоги добавления ссылок для добавления DLL, даже если это не COM. Теперь, когда это COM, он распознает его и загружает в COM-объект.

Самое простое решение, вероятно, состоит в том, чтобы использовать свободный от регистрации COM, что означает, что вы можете развернуть DLL вместе с вашим приложением, вместо того, чтобы фактически регистрировать ее, но вы все равно говорите с ней как с COM-объектом. Это всего лишь случай манипулирования вашим файлом манифеста.

Попробуйте инструмент по адресу здесь , чтобы помочь вам сгенерировать манифест, или выполните поиск здесь для регистрации свободного COM.

1 голос
/ 03 февраля 2012

Чтобы иметь DLL в выводе, вы должны установить для типов Embed Interop значение true

подробнее об этом от MS

0 голосов
/ 04 февраля 2012

Знаете ли вы, что именно вызывает у вас права администратора?Если это регистрация COM, вы можете попробовать зарегистрировать DLL в HKCU \ Software \ Classes вместо HKCR.

...