Библиотека типов и информация о методах сервера

Рассмотрим, как СОМ-сервер может информировать среду разработки об интерфейсах, их идентификаторах GUID, списке поддерживаемых методов и параметрах этих методов. Так как СОМ-клиент создается после создания СОМ-сервера, при его разработке можно получить от СОМ-сервера список его методов и список формальных параметров этих методов. Это позволяет осуществить синтаксический контроль на этапе разработки клиента. Кроме того, названия методов и формальных параметров несут в себе смысловую нагрузку: разработчик легче их воспринимает, поскольку часто назначение методов и параметров очевидно. Также список методов и параметров интерфейсов необходим для доступа к виртуальной таблице методов интерфейса — реализации так называемого раннего связывания (early binding).

Данная проблема решается при помощи библиотеки типов. Реализация библиотеки типов не обязательна — при ее отсутствии доступ к методам СОМ-сервера осуществляется на основании поставляемой с сервером документации. Библиотека типов представляет собой список фабрик классов, поддерживаемых данным СОМ-сервером. Для каждой фабрики классов можно получить список интерфейсов. Для каждого интерфейса приводится список поддерживаемых методов, для каждого из которых можно затребовать список формальных параметров. Порядок следования методов в списке соответствует их порядку следования в виртуальной таблице методов — поэтому на этапе компиляции клиента можно связать вызов метода сервера с соответствующим столбцом виртуальной таблицы.

Все эти списки сохраняются либо непосредственно в СОМ-сервере (в файлах с расширениями *.ехе, *.dll, *.ocx), либо отдельно (в файлах с расширениями *.tlb, *.olb). Для их хранения предусмотрены специальные двоичные форматы. Соответственно, инструменты программирования, поддерживающие импорт библиотек типов, должны знать форматы этих файлов, уметь читать данные из них и представлять эти данные разработчику в естественном, специфическом для данного языка программирования виде. Например, если библиотека типов импортирована в средство разработки, использующее компилятор C++, то ее реализация должна быть представлена с помощью синтаксиса C++; если импортирована в Delphi — с помощью синтаксиса Delphi. При этом разработчик должен отдавать себе отчет, что реально библиотека типов хранится совсем в других форматах.

Если же описание библиотеки типов хранится непосредственно в СОМ-сервере, то на сервере можно реализовать интерфейс ITypeInfo. Пользуясь методами этого интерфейса, среда разработки может опросить сервер о тех же самых параметрах, что считываются из вышеперечисленных файлов. Пользоваться интерфейсом ITypeInfo гораздо проще, чем писать конверторы форматов, и опытный разработчик может легко узнать о содержимом библиотеки типов сервера в клиентском приложении. Соответственно, сама библиотека типов в этом случае может храниться в сервере в произвольном формате.

Для создания и редактирования библиотек типов в Delphi имеется редактор, совмещенный с редактором интерфейсов (определение фабрик классов, интерфейсов и их методов).