Compartilhar via


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
FADF_AUTO
0x0001
Uma matriz alocada na pilha.
FADF_STATIC
0x0002
Uma matriz alocada estaticamente.
FADF_EMBEDDED
0x0004
Uma matriz inserida em uma estrutura .
FADF_FIXEDSIZE
0x0010
Uma matriz que pode não ser redimensionada ou realocada.
FADF_RECORD
0x0020
Uma matriz que contém registros. Quando definido, haverá um ponteiro para a interface IRecordInfo no deslocamento negativo 4 no descritor de matriz.
FADF_HAVEIID
0x0040
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.
FADF_HAVEVARTYPE
0x0080
Uma matriz que tem um tipo variante. O tipo variante pode ser recuperado com SafeArrayGetVartype.
FADF_BSTR
0x0100
Uma matriz de BSTRs.
FADF_UNKNOWN
0x0200
Uma matriz de IUnknown*.
FADF_DISPATCH
0x0400
Uma matriz de IDispatch*.
FADF_VARIANT
0x0800
Uma matriz de VARIANTs.
FADF_RESERVED
0xF008
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