Сервисная программа Tlbimp.ere (Type Library to .NET Assembly Converter — Транслятор (конвертер) библиотеки типов на .NET) находится в папке \Program FilesXMicrosoft .NET\FrameworkSDK\Bin. Она используется для генерации управляемых классов, которые являются упаковщиками неуправляемых классов, построенных на основе модели компонентных объектов Microsoft (COM). В результате получается то, что называется упаковщиком, вызываемым во время выполнения (Runtime Callable Wrapper, RCW). Упаковщик, вызываемый во время выполнения (Runtime Callable Wrapper, RCW), представляет собой компонент .NET (т.е. управляемую сборку динамически подключаемой библиотеки (DLL)), который управляемый клиентский код может использовать для доступа к методам интерфейса модели компонентных объектов Microsoft (СОМ). Эти методы реализованы в ксмпоненте, построенном на основе модели компонентных объектов Microsoft (COM). Утилита Tlbimp.exe является программой командной строки4, которая из библиотеки типов читает информацию модели компонентных объектов Microsoft (COM), генерирует управляемый интерфейсный класс, а также соответствующие метаданные, и помедает результат в сборку упаковщика, вызываемого во время выполнения (Runtime Callable Wrapper, RCW). Полученное в сборке содержимое можно просмотреть с помощью утилиты Ildasm.exe. Ниже приведен синтаксис для вызова утилиты командной строи Tlbimp. ехе:
Tlbimp TypeLibName [options]
Where options may contain the following:
/out:FileName Assembly file name
/namespace:Namespace Assembly Namespace
Вот более русифицированный вариант этой выдачи:
Tlbimp TypeLibName [параметры]
Где параметры могут содержать следующее:
/out:FileName Имя файла сборки
/namespace:Namespace Пространство имен сборки
/asmversion:Version Номер версии сборки
/reference:FileName Ссылки сборки
/publickey:FileName Общедоступный файл ключей
/keyfile:FileName Файл пар ключей
/keycontainer:FileName Контейнер пар ключей
/delaysign Задержка цифровой подписи
/unsafe (опасный) Подавляет проверки защиты
/nologo Подавляет вывод протокола
/silent (тихий) Подавляет вывод (кроме ошибок)
/verbose (подробная) Отображает дополнительную информацию
/primary (первичный) Сделать первичную способную
к взаимодействию сборку
/sysarray SAFEARRAY как Система.Массив /strictref Только сборки
ссылок (/reference) /? или /help (справка) Выводит справочную информацию
Когда утилита Tlbimp.exe импортирует библиотеку типов, построенную на основе модели компонентных объектов Microsoft (COM), она создает пространство имен .NET с именем библиотеки, определенным в библиотеке типов (т.е. с фактическим именем библиотеки, а не с именем файла библиотеки типов, который ее содержит). Tlbimp.exe преобразует каждый сокласс (coclass) модели компонентных объектов Microsoft (COM), определенный в библиотеке типов, в управляемый интерфейсный класс .NET в результирующей сборке .NET, который имеет единственный конструктор без параметров. Tlbimp.exe маскирует каждый интерфейс модели компонентных объектов Microsoft (СОМ), определенный в библиотеке типов, под видом интерфейса .NET в результирующей сборке .NET. Рассмотрим типичный оператор файла IDL библиотеки на основе модели компонентных объектов Microsoft (COM). Этот оператор, показанный ниже, будет использоваться для создания библиотеки типов с помощью Midl.exe. При обработке файла TLB или динамически подключаемой библиотеки (DLL), созданной этим файлом IDL, утилита Tlbimp.exe сгенерирует сборку, содержащую метаданные, в том числе пространство имен LEGACYCOMSERVERLib, управляемый интерфейсный класс LegacyCOMObj и управляемый интерфейс ILegacyCOMObj.
library LEGACYCOMSERVERLib
// библиотека LEGACYCOMSERVERLib
{
coclass LegacyCOMObj
{
[default] interface ILegacyCOMObj;
// [заданный по умолчанию] интерфейс ILegacyCOMObj;
};
};
После того, как вы использовали Tlbimp.exe для генерации сборки упаковщика, можно просмотреть его содержи мое при помощи утилиты lldasm.exe.
Tlbimp LegacyCOMServer.tlb
Ildasm LEGACYCOMSERVERLib.dll
Эта команда отобразит содержимое сборки упаковщика, как показано на рис. 15.2. Обратите внимание, что утилита lldasm.exe в качестве имени пространства имен выводит LEGACYCOMSERVERLib, в качестве имени интерфейса— ILegacyCOMObj, а в качестве имени интерфейсного класса — LegacyCOMObj. В следующем подразделе мы посмотрим на исходный код этого унаследованного компонента, построенного на основе модели компонентных объектов Microsoft (COM).