Поделиться через


Импорт библиотеки типов в качестве сборки

Определения типов COM обычно находятся в библиотеке типов. Напротив, компиляторы, соответствующие CLS, генерируют метаданные типов в сборке. Два источника сведений о типе совершенно разные. В этом разделе описываются методы создания метаданных из библиотеки типов. Результирующая сборка называется interop сборкой, а сведения о типах, содержащиеся в ней, позволяют приложениям .NET Framework использовать типы COM.

Существует два способа сделать эту информацию типа доступной для приложения:

  • С использованием сборок взаимодействия исключительно во время проектирования: начиная с .NET Framework 4, можно инструктировать компилятор внедрять сведения о типе из сборки взаимодействия в ваш исполняемый файл. Компилятор внедряет только информацию о типах, которые использует ваше приложение. Вам не нужно развертывать сборку для взаимодействия с приложением. Это рекомендуемый метод.

  • Развертывание сборок interop: Вы можете создать стандартную ссылку на interop-сборку. В этом случае сборка взаимодействия должна быть развернута непосредственно с вашим приложением. Если вы применяете этот метод и не используете приватный COM-компонент, всегда ссылайтесь на основную сборку взаимодействия (Primary Interop Assembly, PIA), опубликованную автором COM-компонента, который вы планируете включить в управляемый код. Дополнительные сведения о создании и использовании основных сборок взаимодействия см. в разделе "Основные сборки взаимодействия".

При использовании сборок взаимодействия во время разработки можно внедрить сведения о типе из основной сборки взаимодействия, опубликованной автором COM-компонента. Однако вам не нужно развертывать главную сборку взаимодействия вместе с приложением.

Использование сборок взаимодействия, предназначенных только для проектирования, сокращает размер приложения, потому что большинство приложений не используют все возможности COM-компонента. Компилятор очень эффективен при внедрении сведений о типе; Если приложение использует только некоторые методы в com-интерфейсе, компилятор не внедряет неиспользуемые методы. Если приложение, включающее сведения о внедренном типе, взаимодействует с другим таким приложением или с приложением, использующим основную сборку взаимодействия, то среда CLR использует правила эквивалентности типов, чтобы определить, представляют ли два типа с одинаковым именем один и тот же тип COM. Эти правила не нужно знать, чтобы использовать COM-объекты. Однако если вы заинтересованы в правилах, см. раздел "Эквивалентность типов" и "Внедренные типы взаимодействия".

Создание метаданных

Библиотеки типов COM могут быть автономными файлами с расширением TLB, например Loanlib.tlb. Некоторые библиотеки типов внедрены в раздел ресурсов файла .dll или .exe. Другими источниками сведений о библиотеке типов являются файлы .olb и .ocx.

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

  • Визуальная студия

    Visual Studio автоматически преобразует типы COM из библиотеки типов в метаданные в составе сборки. Инструкции см. в разделе "Практическое руководство. Добавление ссылок на библиотеки типов".

  • Средство импорта библиотек типов (Tlbimp.exe)

    Средство импорта библиотек типов предоставляет параметры командной строки для настройки метаданных в результирующем файле взаимодействия, импортирует типы из существующей библиотеки типов и создает сборку взаимодействия и пространство имен. Инструкции см. в разделе "Практическое руководство. Создание сборок взаимодействия из библиотек типов".

  • Класс System.Runtime.InteropServices.TypeLibConverter

    Этот класс предоставляет методы для преобразования соклассов и интерфейсов в библиотеку типов в метаданные в сборке. Он создает те же метаданные на выходе, что и Tlbimp.exe. Однако, в отличие от Tlbimp.exe, TypeLibConverter класс может преобразовать библиотеку типов в память в метаданные.

  • Пользовательские оболочки

    Если библиотека типов недоступна или неправильная, один из вариантов — создать повторяющееся определение класса или интерфейса в управляемом исходном коде. Затем вы компилируете исходный код с компилятором, нацеленным на среду выполнения, чтобы создать метаданные в сборке.

    Чтобы определить типы COM вручную, необходимо иметь доступ к следующим элементам:

    • Точные описания определяемых coclasses и интерфейсов.

    • Компилятор, например компилятор C#, который может создать соответствующие определения классов .NET Framework.

    • Знание правил преобразования библиотеки типов в сборочное представление.

    Написание пользовательской оболочки — это продвинутый метод. Дополнительные сведения о создании пользовательской оболочки см. в разделе "Настройка стандартных оболочков".

Дополнительные сведения о процессе импорта COM interop см. в сводке по преобразованию библиотеки типов в сборку.

См. также