Структура SAFEARRAY (oaidl.h)

Представляет безопасный массив.

Синтаксис

typedef struct tagSAFEARRAY {
  USHORT         cDims;
  USHORT         fFeatures;
  ULONG          cbElements;
  ULONG          cLocks;
  PVOID          pvData;
  SAFEARRAYBOUND rgsabound[1];
} SAFEARRAY;

Члены

cDims

Количество измерений.

fFeatures

Флаги.

Значение Значение
FADF_AUTO
0x0001
Массив, выделенный в стеке.
FADF_STATIC
0x0002
Массив, статически выделенный.
FADF_EMBEDDED
0x0004
Массив, внедренный в структуру.
FADF_FIXEDSIZE
0x0010
Массив, размер или перераспределение не допускается.
FADF_RECORD
0x0020
Массив, содержащий записи. Если этот параметр задан, в дескрипторе массива появится указатель на интерфейс IRecordInfo с отрицательным смещением 4.
FADF_HAVEIID
0x0040
Массив с идентифицируемым интерфейсом IID. Если этот параметр задан, в дескрипторе безопасного массива будет иметься GUID с отрицательным смещением 16. Флаг устанавливается, только если также задан FADF_DISPATCH или FADF_UNKNOWN.
FADF_HAVEVARTYPE
0x0080
Массив с типом variant. Тип variant можно получить с помощью SafeArrayGetVartype.
FADF_BSTR
0x0100
Массив BSTR.
FADF_UNKNOWN
0x0200
Массив IUnknown*.
FADF_DISPATCH
0x0400
Массив IDispatch*.
FADF_VARIANT
0x0800
Массив VARIANT.
FADF_RESERVED
0xF008
Биты, зарезервированные для использования в будущем.

cbElements

Размер элемента массива.

cLocks

Количество раз, когда массив был заблокирован без соответствующей разблокировки.

pvData

Данные.

rgsabound[1]

По одному привязан для каждого измерения.

Комментарии

Массив rgsabound хранится с наибольшим левым измерением в rgsabound[0] и самым правым измерением в rgsabound[cDims - 1]. Если массив был указан в C-подобном синтаксисе как [2][5], он будет содержать два элемента в векторе rgsabound . Элемент 0 имеет lLbound 0 и cElements 2. Элемент 1 имеет lLbound 0 и cElements 5.

Флаги fFeatures описывают атрибуты массива, которые могут повлиять на способ освобождения массива. Поле fFeatures описывает, какой тип данных хранится в SAFEARRAY и как выделяется массив. Это позволяет освободить массив без ссылки на содержащий его вариант.

Потокобезопасность

Все общедоступные статические члены типа данных SAFEARRAY являются потокобезопасны. Члены экземпляра не гарантируют потокобезопасность.

Например, рассмотрим приложение, использующее функции SafeArrayLock и SafeArrayUnlock . Если эти функции вызываются одновременно из разных потоков в одном экземпляре типа данных SAFEARRAY , может быть создано несогласованное число блокировок. В конечном итоге функция SafeArrayUnlock вернет E_UNEXPECTED. Это можно предотвратить, предоставив собственный код синхронизации.

Требования

Требование Значение
Заголовок oaidl.h