Сущность технологии COM


         

Типы данных


Все интерфейсы СОМ должны быть определены в IDL. IDL позволяет описывать довольно сложные типы данных в стиле, не зависящем от языка и платформы. Рисунок 2.6 показывает базовые типы, которые поддерживаются IDL, и их отображения в языки С, Java и Visual Basic. Целые и вещественные типы не требуют объяснений. Первые "интересные" типы данных, встречающиеся при программировании в СОМ, — это символы и строки.

Язык

IDL

Microsoft C++

Visual Basic

Microsoft Java

Основные типы boolean unsigned char unsupported char
byte unsigned char unsupported char
small char unsupported char
short short Integer short
long long Long int
hyper _int64 unsupported long
float float Single float
double double Double double
char unsigned char unsupported char
wchar_t wchar_t Integer short
enum enum Enum int
Interface Pointer Interface Pointer Interface Ref. Interface Ref.
Расширенные типы VARIANT VARIANT Variant ms.com.Variant
BSTR BSTR String java.lang.String
VARIANT_BOOL short [-1/0] Boolean [True/False] boolean [true/false]

Рис. 2.6. Базовые типы СОМ

Все символы в СОМ представлены с использованием типа данных OLECHAR. Для Windows NT, Windows 95, Win32s и Solaris OLECHAR — это просто typedef для типа данных С wchar_t. Специфика других платформ описана в соответствующих документациях. Платформы Win32 используют тип данных wchar_t для представления 16-битных символов Unicode. Поскольку типы указателей в IDL созданы так, что указывают на одиночные переменные, а не на массивы, то IDL вводит атрибут [string], чтобы подчеркнуть, что указатель указывает на массив-строку с завершающим нулем:

HRESULT Method([in, string] const OLECHAR *pwsz);

Для определения строк и символов, совместимых с OLECHAR, в СОМ введен макрос OLESTR, который приписывает букву L перед строковой или символьной константой, информируя таким образом компилятор о том, что эта константа имеет тип wchar_t. Например, правильным будет такой способ инициализировать указатель OLECHAR с помощью строкового литерала:



Содержание  Назад  Вперед