Шаг 158.
Среда программирования Visual C++.
Архитектура СОМ. Диспетчерские интерфейсы. Библиотеки типов

    На этом шаге мы рассмотрим работу с библиотекой типов.

    Вы, наверное, уже поняли, что диспетчерский механизм - относительно медленный способ обмена данными между сервером и клиентом. Кроме того, упаковка/распаковка параметров в/из переменных VARIANT небезопасна с точки зрения сохранения типа. Высокоэффективные языки разработки типа Visual Basic 6.0 должны обращаться к методам интерфейса напрямую через vtable.

    Для этого клиенту Visual Basic необходимо знать номер и типы параметров, ожидаемых методами интерфейса. Эти сведения предаставляются клиенту в библиотеке типов (type library) - двоичном oписании параметров и методов интерфейса, а также параметров метода. Библиотеку типов можно рассматривать как откомпилированную независимую от языка версию заголовочного файла C++.

    Среда Visual Basic считывает библиотеку типов и предоставляет описание интерфейса программисту. Тот создает экземпляр компонента, используя синтаксис Visual Basic для прямого доступа к vtable компонента. Сведения, полученные из библиотеки типов, позволяют разработчику передавать в методы интерфейса параметры корректных типов. Таким образом, в Visual Basic обходят диспетчерский механизм и повышают производительность, применив сервер, встраиваемый в процесс. Как Вы помните, создавая доступный клиенту Visual Basic компонент, нужно использовать исключительно типы данных, поддерживаемые Automation. Библиотека типов описана с применением IDL.

    MIDL-компилятор создает файл библиотеки типов с расширением *.tlb, который зачастую компонуется вместе с DLL- или ЕХЕ-сервером COM-компонента.

    Чтобы клиенты, написанные на языках типа Visual Basic, получили доступ к Вашей библиотеке типов, в реестр необходимо внести некоторые записи, относящиеся к СОМ-объекту. Они позволят библиотеке СОМ найти созданную Вами библиотеку типов.

    На рисунке 1 показана схема записей в реестре, относящихся к COМ-объекту, поддерживающему библиотеку типов.


Рис.1. Записи реестра для библиотеки типов

    Практически для нахождения библиотеки типов достаточно всего лишь двух записей. В разделе CLSID Вашего объекта нужно добавить подраздел TypeLib, которому присваивается значение идентификатоpa LIBID библиотеки типа - ее GUID, указанный в файле IDL.

    Этот же идентификатор LIBID является именем второго подраздела, который надо создать в разделе HKEY_CLASSES_ROOT\TypeLib. Как видно из рисунка 1, в этом разделе есть еще несколько подразделов. Например, в win32 задается путь к файлу библиотеки типов:

    Win32 = c:\Encoder\debug\Encoder.dll

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

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

    На следующем шаге мы рассмотрим двойные интерфейсы.




Предыдущий шаг Содержание Следующий шаг