Condividi tramite


Struttura SAFEARRAY (oaidl.h)

Rappresenta una matrice sicura.

Sintassi

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

Members

cDims

Numero di dimensioni.

fFeatures

Bandiere.

Valore Significato
FADF_AUTO
0x0001
Matrice allocata nello stack.
FADF_STATIC
0x0002
Matrice allocata in modo statico.
FADF_EMBEDDED
0x0004
Matrice incorporata in una struttura.
FADF_FIXEDSIZE
0x0010
Matrice che potrebbe non essere ridimensionata o riallocata.
FADF_RECORD
0x0020
Matrice che contiene record. Se impostato, nel descrittore di matrice sarà presente un puntatore all'interfaccia IRecordInfo con offset negativo 4.
FADF_HAVEIID
0x0040
Matrice con un'interfaccia di identificazione IID. Se impostato, nel descrittore della matrice sicura sarà presente un GUID con offset negativo 16. Il flag viene impostato solo quando è impostato anche FADF_DISPATCH o FADF_UNKNOWN.
FADF_HAVEVARTYPE
0x0080
Matrice con un tipo variant. Il tipo variant può essere recuperato con SafeArrayGetVartype.
FADF_BSTR
0x0100
Matrice di route BSTR.
FADF_UNKNOWN
0x0200
Matrice di IUnknown*.
FADF_DISPATCH
0x0400
Matrice di IDispatch*.
FADF_VARIANT
0x0800
Matrice di VARIANT.
FADF_RESERVED
0xF008
Bit riservati per uso futuro.

cbElements

Dimensione di un elemento di matrice.

cLocks

Il numero di volte in cui la matrice è stata bloccata senza uno sblocco corrispondente.

pvData

Dati.

rgsabound[1]

Un limite per ogni dimensione.

Commenti

La matrice rgsabound viene archiviata con la dimensione più a sinistra in rgsabound[0] e la dimensione più a destra in rgsabound[cDims - 1]. Se una matrice è stata specificata in una sintassi simile a C come [2][5], avrà due elementi nel vettore rgsabound . L'elemento 0 ha un lLbound pari a 0 e un cElements pari a 2. L'elemento 1 ha un lLbound pari a 0 e un cElements pari a 5.

I flag fFeatures descrivono gli attributi di una matrice che possono influire sulla modalità di rilascio della matrice. Il campo fFeatures descrive il tipo di dati archiviati in SAFEARRAY e la modalità di allocazione della matrice. In questo modo è possibile liberare la matrice senza fare riferimento alla variante che lo contiene.

Thread safety

Tutti i membri statici pubblici del tipo di dati SAFEARRAY sono thread-safe. Non è garantito che i membri dell'istanza siano thread-safe.

Si consideri ad esempio un'applicazione che usa le funzioni SafeArrayLock e SafeArrayUnlock . Se queste funzioni vengono chiamate simultaneamente da thread diversi nella stessa istanza del tipo di dati SAFEARRAY , è possibile creare un conteggio di blocchi incoerente. In questo modo, la funzione SafeArrayUnlock restituirà E_UNEXPECTED. È possibile evitare questo problema specificando il codice di sincronizzazione personalizzato.

Requisiti

Requisito Valore
Intestazione oaidl.h