Сущность технологии 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 с помощью строкового литерала:




Начало  Назад  Вперед



Книжный магазин