Раннее связывание клиента на основе модели компонентных объектов Microsoft (COM) с компонентами .NET Ранне-связываемые клиенты на основе модели компонентных объектов Microsoft (СОМ) обычно используют информацию библиотеки типов для доступа к компонентам на основе модели компонентных объектов Microsoft (COM). Такая информация представляет собой удобный способ создания экземпляров классов на основе модели компонентных объектов Microsoft (COM), определенных в этих компонентах, созданных на основе модели компонентных объектов Microsoft (COM). Информация а библиотеках может храниться в файлах TLB, динамически подключаемых библиотеках (DLL), специализированных управляющих элементах OLE (OCX) и исполняемых файлах, однако только файлы TLB специально предназначены именно для этой цели.
Библиотека типов может быть сгенерирована с помощью утилиты Tlbexp.exe (Assembly to Type Library Converter — Конвертер сборки в библиотеку типов) из метаданных в сборке .NET. Это позволяет клиентам на основе модели компонентных объектов Microsoft (СОМ) просматривать компоненты .NET так, как будто они являются обычными компонентами, построенными на основе модели компонентных объектов Microsoft (COM). Утилита Tlbexp. exe (Assembly to Type Library Converter — Конвертер сборки в библиотеку типов) является дополняющей сервисной программой к утилите Tlbimp. exe, описанной в предыдущем разделе этой главы. Традиционный клиент на основе модели компонентных объектов Microsoft (COM) может использовать информацию в полученной библиотеке типов для доступа к компонентам .NET, применяя раннее связывание. Ниже приведен синтаксис для вызова утилиты командной строки Tlbexp. exe (Assembly to Type Library Converter — Конвертер сборки в библиотеку типов): Tlbexp AssemblyName [options]
Вот более русифицированный вариант этой выдачи: Tlbexp AssemblyName [параметры]
Утилита Tlbexp. exe (Assembly to Type Library Converter — Конвертер сборки в библиотеку типов) является хорошим средством генерации полезной информации библиотеки типов для сборки .NET. Однако клиентам на основе модели компонентных объектов Microsoft (COM) необходима также запись информации в системный реестр для того, чтобы среда модели компонентных объектов Microsoft (COM) могла найти нужную фабрику классов, путь к серверу, и т.п. Утилита регистрации сборки Regasm. exe (Assembly Registration Utility) прочитывает метаданные в сборке и добавляет необходимые записи в системный реестр, что позволяет клиентам на основе модели компонентных объектов Microsoft (COM) использовать компоненты сборки .NET так, как будто они являются обычными зарегистрированными компонентами, построенными на основе модели компонентных объектов Microsoft (COM). Конечно, клиенты при этом используют заместитель — вызываемый упаковщик на основе модели компонентных объектов Microsoft (COM) (Callable COM Wrapper, CCW).
Regasm AssemblyPath [options]
Вот более русифицированный вариант этой выдачи: Regasm AssemblyPath [параметры]
Теперь давайте воспользуемся утилитами Tlbexp. exe (Assembly to Type Library Converter— Конвертер сборки в библиотеку типов) и Regasm.exe (Assembly Registration Utility — Утилита регистрации сборки) в реальном примере. Рассмотрим следующий код библиотеки классов на управляемом C++ в папке SomeManagedClass. Утилита Tlbexp.exe (Assembly to Type Library Converter — Конвертер сборки в библиотеку типов) откроет для модели компонентных объектов Microsoft (COM) только управляемые общедоступные (public) типы. Именно поэтому класс ManagedClass объявлен как public _gc (общедоступный со сборкой мусора). Кроме того, без общедоступного конструктора по умолчанию (т.е. не имеющего параметров) клиенты на основе модели компонентных объектов Microsoft (COM) не могут создавать типы при вызове CoCreatelnstance или CoCreatelnstanceEx. Таким образом, в нижеприведенном тексте класс ManagedClass имеет общедоступный конструктор по умолчанию.
//SomeManagedClass.срр
В результате компиляции вышеописанной программы как проекта библиотеки классов на управляемом C++ (managed C++ Class Library) будет создана сборка — динамически подключаемая библиотека (DLL) — файл с именем SomeManagedClass . dll Следующая команда создаст из этой сборки библиотеку типов с именем SomeManagedClass.tlb
Можно просмотреть содержимое этого файла библиотеки типов, используя сервисную
программу для просмотра объектов OLE/COM — утилиту Oleview.exe, расположенную
в папке утилит SDK среды NET Это показано на рис. 15.4
//COMClientOfManagedClass cpp
Однако компоненты NET будут недоступны для приложений клиентов, построенных
на основе модели компонентных объектов Microsoft (COM), пока требуемые элементы
не будут внесены в системный реестр и сборка не станет доступной для загрузчика
классов общеязыковой среды выполнения CLR (либо локально, либо в глобальном
кэше сборки) Для регистрации используется утилита регистрации сборки Regasm.exe
(Assembly Registration Utility). Она читает метаданные в сборке компонентов
.NET и создает соответствующие записи в системном реестре. Это позволяет любому
клиенту на основе модели компонентных объектов Microsoft (COM) получать доступ
к компонентам .NET так, как будто это обычные компоненты, построенные на основе
модели компонентных объектов Microsoft (COM).
Regasm SomeMenagedClass.dll
Затем можно использовать утилиту Regedt32 . exe для проверки того, что информация была корректно занесена в системный реестр, что и показано на рис. 15.5.
|