Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Представляет безопасный массив.
Синтаксис
typedef struct tagSAFEARRAY {
USHORT cDims;
USHORT fFeatures;
ULONG cbElements;
ULONG cLocks;
PVOID pvData;
SAFEARRAYBOUND rgsabound[1];
} SAFEARRAY;
Members
cDims
Количество измерений.
fFeatures
Флаги.
| Ценность | Meaning |
|---|---|
|
Массив, выделенный в стеке. |
|
Массив, статически выделенный. |
|
Массив, внедренный в структуру. |
|
Массив, который не может быть изменен или перераспрежден. |
|
Массив, содержащий записи. При установке будет указатель на интерфейс IRecordInfo непосредственно перед дескриптором безопасного массива (при отрицательном размере смещения(IRecordInfo*)). |
|
Массив, имеющий интерфейс идентификации IID. Если задано, перед дескриптором безопасного массива (при отрицательном смещение 16) будет использоваться GUID. Флаг задается только в том случае, если FADF_DISPATCH или FADF_UNKNOWN также задано. |
|
Массив с типом варианта. Тип варианта можно получить с помощью SafeArrayGetVartype. |
|
Массив BSTR. |
|
Массив IUnknown*. |
|
Массив IDispatch*. |
|
Массив VARIANTs. |
|
Биты, зарезервированные для будущего использования. |
cbElements
Размер элемента массива.
cLocks
Количество заблокированных массивов без соответствующей разблокировки.
pvData
Данные.
rgsabound[1]
Один привязан к каждому измерению.
Замечания
Массив rgsabound хранится с левым большинством измерений в rgsabound[0] и правым измерением в rgsabound[cDims - 1]. Если массив был указан в синтаксисе C-like как [2][5], он будет содержать два элемента в векторе rgsabound . Элемент 0 имеет lLbound от 0 и cElements 2. Элемент 1 имеет lLbound от 0 и cElements 5.
Флаги fFeatures описывают атрибуты массива, который может повлиять на способ выпуска массива. Поле fFeatures описывает тип данных, хранящихся в SAFEARRAY , и способ выделения массива. Это позволяет освободить массив без ссылки на его содержащий вариант.
Безопасность потоков
Все общедоступные статические члены типа данных SAFEARRAY являются потокобезопасным. Элементы экземпляра не гарантированы как потокобезопасные.
Например, рассмотрим приложение, использующее функции SafeArrayLock и SafeArrayUnlock . Если эти функции вызываются одновременно из разных потоков в одном экземпляре типа данных SAFEARRAY , может быть создано несогласованное число блокировок. В конечном итоге функция SafeArrayUnlock возвращает E_UNEXPECTED. Это можно предотвратить, предоставив собственный код синхронизации.
Требования
| Требование | Ценность |
|---|---|
| Header | oaidl.h |