Можно ли использовать COM-компонент без регистрации, не регистрируя его на компьютере разработчика? - PullRequest
4 голосов
/ 15 июня 2011

У меня есть разработанный мной COM-компонент без регистрации, который отлично работает на целевых машинах без необходимости регистрации компонента.Он находится в dll со встроенным tlb и ресурсом RT_MANIFEST, в котором есть манифест, в котором перечислены зависимости сборки и CLSID для компонента.

В Visual Studio (2008) мне все еще нужно зарегистрировать этот COM-компонент, чтобы выполнить по крайней мере две вещи, которые я пробовал.При добавлении ссылки на компонент я не могу выбрать изолированное свойство для ссылки, если компонент не зарегистрирован.Я также не могу создавать экземпляры объекта, когда отладчик работает, если компонент не зарегистрирован.Однако я могу добавить ссылку и скомпилировать приложение и запустить его без регистрации компонента.

Есть ли какой-либо способ использовать COM-компонент без регистрации в Visual Studio без его регистрации, или он должен быть зарегистрированна машине разработки, чтобы все работало правильно?

1 Ответ

8 голосов
/ 15 июня 2011

Здесь важно понимать разницу между временем компиляции и временем использования компонента COM.Reg-free COM - это просто функция времени выполнения.Манифест, который вы пишете, который описывает интерфейс COM, является частью без регистрации.Вам не нужно регистрировать COM-компонент в реестре компьютера.Вместо этого вы предоставляете регистрационную информацию в файле.Это означает, что вам не нужен установщик.Что также означает, что вы изолированы от проблем с регистрацией.Более известный как DLL Hell.

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

Это очень отличается от времени компиляции.Библиотека типов очень полезна, чтобы сообщить компилятору, правильно ли вы написали код.У компонента COM действительно есть интерфейс IFoo?Есть ли в интерфейсе IFoo метод Mumble (), который принимает два аргумента?Библиотека типов сообщает компилятору, как выглядит интерфейс, и позволяет компилятору выполнять статическую проверку написанного вами кода.Отличие от «позднего связывания», кстати, опция, которая позволяет вам писать код COM-клиента без библиотеки типов (и, следовательно, без проверки типов).Распространено в языках сценариев.

Повторяем: COM без регистрации - это просто установка, а не написание кода.

...