Estrutura SAFEARRAY (oaidl.h)
Representa uma matriz segura.
Sintaxe
typedef struct tagSAFEARRAY {
USHORT cDims;
USHORT fFeatures;
ULONG cbElements;
ULONG cLocks;
PVOID pvData;
SAFEARRAYBOUND rgsabound[1];
} SAFEARRAY;
Membros
cDims
O número de dimensões.
fFeatures
Sinalizadores.
Valor | Significado |
---|---|
|
Uma matriz alocada na pilha. |
|
Uma matriz alocada estaticamente. |
|
Uma matriz inserida em uma estrutura . |
|
Uma matriz que pode não ser redimensionada ou realocada. |
|
Uma matriz que contém registros. Quando definido, haverá um ponteiro para a interface IRecordInfo no deslocamento negativo 4 no descritor de matriz. |
|
Uma matriz que tem uma interface de identificação IID. Quando definido, haverá um GUID no deslocamento negativo 16 no descritor de matriz segura. O sinalizador é definido somente quando FADF_DISPATCH ou FADF_UNKNOWN também está definido. |
|
Uma matriz que tem um tipo variante. O tipo variante pode ser recuperado com SafeArrayGetVartype. |
|
Uma matriz de BSTRs. |
|
Uma matriz de IUnknown*. |
|
Uma matriz de IDispatch*. |
|
Uma matriz de VARIANTs. |
|
Bits reservados para uso futuro. |
cbElements
O tamanho de um elemento de matriz.
cLocks
O número de vezes que a matriz foi bloqueada sem um desbloqueio correspondente.
pvData
Os dados.
rgsabound[1]
Um associado para cada dimensão.
Comentários
A matriz rgsabound é armazenada com a dimensão mais à esquerda em rgsabound[0] e a dimensão mais à direita em rgsabound[cDims - 1]
. Se uma matriz fosse especificada em uma sintaxe semelhante a C como um [2][5], ela teria dois elementos no vetor rgsabound . O elemento 0 tem um lLbound de 0 e um cElements de 2. O elemento 1 tem um lLbound de 0 e um cElements de 5.
Os sinalizadores fFeatures descrevem atributos de uma matriz que podem afetar como a matriz é liberada. O campo fFeatures descreve que tipo de dados é armazenado no SAFEARRAY e como a matriz é alocada. Isso permite liberar a matriz sem referenciar sua variante que contém.
Acesso thread-safe
Todos os membros estáticos públicos do tipo de dados SAFEARRAY são thread-safe. Não há garantia de que os membros da instância sejam thread-safe.
Por exemplo, considere um aplicativo que usa as funções SafeArrayLock e SafeArrayUnlock . Se essas funções forem chamadas simultaneamente de threads diferentes na mesma instância de tipo de dados SAFEARRAY , uma contagem de bloqueio inconsistente poderá ser criada. Isso eventualmente fará com que a função SafeArrayUnlock retorne E_UNEXPECTED. Você pode evitar isso fornecendo seu próprio código de sincronização.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | oaidl.h |