Диспетчерские интерфейсы. Библиотеки типов

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

   
Вы, наверное, уже поняли, что диспетчерский механизм - относительно медленный способ обмена данными между
сервером и клиентом. Кроме того, упаковка/распаковка параметров в/из переменных 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 считывает и анализирует
библиотеку типов, создает программное представление и дает возможность писать и исполнять код, пользующийся
услугами СОМ-сервера.

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий