Импорт библиотеки типов в виде сборки
Определения COM-типов обычно хранятся в библиотеке типов. С другой стороны, CLS-совместимые компиляторы создают в сборке метаданные типов. Эти два источника сведений о типе заметно отличаются. В этом разделе описываются способы создания метаданных из библиотеки типов. Полученная сборка называется сборкой взаимодействия, и содержащаяся в ней информация о типах позволяет приложениям платформы .NET Framework использовать типы COM.
Есть два способа предоставить приложению эту информацию о типах:
С использованием сборок взаимодействия только на этапе проектирования: начиная с платформы .NET Framework 4, можно указать компилятору, что в исполняемый файл следует внедрить информацию о типах из сборки взаимодействия. Компилятор встраивает информацию только о типах, используемых приложением. Развертывать сборку взаимодействия вместе с приложением не требуется. Это рекомендуемая методика.
Путем развертывания сборок взаимодействия: можно создать стандартную ссылку на сборку взаимодействия. В данном случае сборку взаимодействия следует развернуть вместе с приложением. Если применяется данный метод и не используется частный COM-компонент, необходимо во всех случаях ссылаться на основную сборку взаимодействия, опубликованную автором COM-компонента, который планируется интегрировать в управляемый код. Дополнительные сведения о создании и использовании основных сборок взаимодействия см. в разделе Основные сборки взаимодействия.
При использовании сборок взаимодействия только во время проектирования можно встраивать информацию о типах из основной сборки взаимодействия, опубликованной автором COM-компонента. Развертывать основную сборку взаимодействия вместе с приложением при этом не требуется.
Использование сборок взаимодействия только во время проектирования сокращает размер приложения, поскольку большинство приложений используют лишь некоторые функции компонентов COM. Компилятор весьма эффективно внедряет информацию о типах: если приложение использует лишь некоторые методы интерфейса COM, то компилятор не будет встраивать неиспользуемые методы. Если приложение со внедренной информацией о типах взаимодействует с другим аналогичным приложением или приложением, использующим основную сборку взаимодействия, то среда CLR использует правила эквивалентности типов, чтобы определить, представляют ли одноименные типы один и тот же тип COM. Необязательно знать эти правила, чтобы использовать объекты COM. Тем не менее, сведения о них можно найти в разделе Эквивалентность типов и внедренные типы взаимодействия.
Создание метаданных
Библиотеки COM-типов могут быть автономными TLB-файлами, например Loanlib.tlb. Некоторые библиотеки типов встроены в раздел ресурсов файла DLL или EXE. Другими источниками данных библиотек типов являются файлы OLB и OCX.
После обнаружения библиотеки типов, содержащей реализацию искомого COM-типа, для создания сборки взаимодействия, содержащей метаданные типа, разработчик может выбрать нужный из нескольких вариантов.
Visual Studio
Visual Studio автоматически преобразует COM-типы библиотеки типов в метаданные сборки. Инструкции см. в разделах Практическое руководство. Добавление ссылок на библиотеки типов и Пошаговое руководство. Внедрение данных о типе из сборок для приложений Microsoft Office (C# и Visual Basic).
Программа экспорта библиотек типов (Tlbexp.exe)
Программа экспорта библиотек типов предоставляет параметры командной строки для настройки метаданных в результирующем файле взаимодействия, импортирует типы из существующей библиотеки типов и создает сборку взаимодействия и пространство имен. Инструкции см. в разделе Практическое руководство. Создание сборок взаимодействия их библиотек типов.
Класс System.Runtime.InteropServices.TypeLibConverter
Этот класс предоставляет методы для преобразования компонентных классов и интерфейсов из библиотеки типов в метаданные внутри сборки. При этом создаются те же метаданные, что и в программе Tlbimp.exe. Однако же в отличие от Tlbimp.exe класс TypeLibConverter может преобразовать в метаданные библиотеку типов, находящуюся в памяти.
Настраиваемые оболочки
Если библиотека типов недоступна или является неверной, единственный выход — создать в управляемом исходном коде дубликат определения класса или интерфейса. После этого нужно скомпилировать исходный код с помощью компилятора, который обращается к среде выполнения, чтобы создать метаданные в сборке.
Чтобы определить COM-типы вручную, необходим доступ к следующим элементам:
точные описания определяемых компонентных классов и интерфейсов;
компилятор, например, компилятор C#, который может создавать соответствующие определения классов .NET Framework;
сведения о правилах преобразования библиотек типов в сборки.
Создание настраиваемой оболочки — это сложная процедура. Дополнительные сведения о создании настраиваемых оболочек см. в разделе Настройка стандартных оболочек.
Дополнительные сведения о процессе импорта COM-взаимодействия см. в разделе Общие сведения о преобразовании библиотеки типов в сборку.
См. также
Задачи
Практическое руководство. Добавление ссылок на библиотеки типов
Практическое руководство. Создание сборок взаимодействия их библиотек типов
Ссылки
Tlbimp.exe (программа экспорта библиотек типов)
Основные понятия
Предоставление клиентам .NET Framework доступа к COM-компонентам
Настройка стандартных оболочек
Использование COM-типов в управляемом коде
Компиляция проекта, использующего взаимодействие
Развертывание приложения взаимодействия