Шаг 190.
Среда программирования Visual C++.
Приложения-клиенты СОМ. Директива #import

    На этом шаге мы рассмотрим особенности использования директивы #import.

    Директива препроцессора #import позволяет на основе данных библиотеки типов сформировать заголовочные файлы объектов и их интерфейсов в формате C++. Это очень удобно, когда у Вас нет доступа к файлам, созданным MIDL-компилятором, - библиотека типов доступна практически всегда, ведь она обычно компонуется вместе с СОМ-сервером в один DLL- или ЕХЕ-файл. Кроме того, директива #import формирует ряд "интеллектуальных" указателей на интерфейсы СОМ-объектов.

    Когда Вы применяете #import, препроцессор компилятора Visual Studio создает два заголовочных файла, в которые помещается реконструированное содержание библиотеки типов в формате исходного текста на C++. Главный заголовочный файл похож на сгенерированный MIDL-компилятором в том смысле, что также объявляет функции C++, используемые для вызова методов интерфейса СОМ-объекта. Однако в нем есть и дополнительные функции, которые скрывают методы интерфейса для предоставления свойств и методов в формате, ожидаемом написанными на Visual Basic клиентами. К свойствам можно обращаться как к переменным-членам класса, а методы скрыты так, чтобы параметр [out, retval] передавался в качестве возвращаемого значения. Переменная типа HRESULT перехватывается, и если она сообщает об ошибке, то возбуждается исключение _com_error. При необходимости классы _bstr_t и _variant_t применяются в качестве типов параметров и возвращаемых значений функций-оболочек.

    Главный заголовочный файл имеет то же имя, что и библиотека типов или DLL, а его расширение - *.tlh. Вспомогательный заголовочный файл получает имя библиотеки типов и расширение *.tli. Он содержит реализацию созданных компилятором функций-оболочек и включен директивой #include в главный файл.

    Оба заголовочных файла помещаются в выходную папку. Они считываются и используются компилятором так же, как если бы они подключались директивой #include.

    Главный заголовочный файл библиотеки типов содержит объявления "интеллектуальных" указателей на интерфейсы, предоставляемые СОМ-объектом. Макрос _COM_SMARTPTR_TYPEDEF служит для создания на основе шаблона _com_ptr_t всех интерфейсов, определенных в библиотеке типов. Файл comdef.h с определениями класов поддержки компилятора включен в TLH-файл.

    На следующем шаге мы рассмотрим пример использования этой директивы.




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