Структура SAFEARRAY (oaidl.h)
Представляет безопасный массив.
Синтаксис
typedef struct tagSAFEARRAY {
USHORT cDims;
USHORT fFeatures;
ULONG cbElements;
ULONG cLocks;
PVOID pvData;
SAFEARRAYBOUND rgsabound[1];
} SAFEARRAY;
Члены
cDims
Количество измерений.
fFeatures
Флаги.
Значение | Значение |
---|---|
|
Массив, выделенный в стеке. |
|
Массив, статически выделенный. |
|
Массив, внедренный в структуру. |
|
Массив, размер или перераспределение не допускается. |
|
Массив, содержащий записи. Если этот параметр задан, в дескрипторе массива появится указатель на интерфейс IRecordInfo с отрицательным смещением 4. |
|
Массив с идентифицируемым интерфейсом IID. Если этот параметр задан, в дескрипторе безопасного массива будет иметься GUID с отрицательным смещением 16. Флаг устанавливается, только если также задан FADF_DISPATCH или FADF_UNKNOWN. |
|
Массив с типом variant. Тип variant можно получить с помощью SafeArrayGetVartype. |
|
Массив BSTR. |
|
Массив IUnknown*. |
|
Массив IDispatch*. |
|
Массив VARIANT. |
|
Биты, зарезервированные для использования в будущем. |
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 |