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 |
---|---|
|
Matrice allocata nello stack. |
|
Matrice allocata in modo statico. |
|
Matrice incorporata in una struttura. |
|
Matrice che potrebbe non essere ridimensionata o riallocata. |
|
Matrice che contiene record. Se impostato, nel descrittore di matrice sarà presente un puntatore all'interfaccia IRecordInfo con offset negativo 4. |
|
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. |
|
Matrice con un tipo variant. Il tipo variant può essere recuperato con SafeArrayGetVartype. |
|
Matrice di route BSTR. |
|
Matrice di IUnknown*. |
|
Matrice di IDispatch*. |
|
Matrice di VARIANT. |
|
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 |