Estructura SAFEARRAY (oaidl.h)
Representa una matriz segura.
Sintaxis
typedef struct tagSAFEARRAY {
USHORT cDims;
USHORT fFeatures;
ULONG cbElements;
ULONG cLocks;
PVOID pvData;
SAFEARRAYBOUND rgsabound[1];
} SAFEARRAY;
Miembros
cDims
Número de dimensiones.
fFeatures
Banderas.
Valor | Significado |
---|---|
|
Matriz que se asigna en la pila. |
|
Matriz que se asigna estáticamente. |
|
Matriz incrustada en una estructura. |
|
Matriz que no se puede cambiar de tamaño ni reasignar. |
|
Matriz que contiene registros. Cuando se establece, habrá un puntero a la interfaz IRecordInfo en desplazamiento negativo 4 en el descriptor de matriz. |
|
Matriz que tiene una interfaz de identificación de IID. Cuando se establece, habrá un GUID en desplazamiento negativo 16 en el descriptor de matriz seguro. La marca solo se establece cuando también se establece FADF_DISPATCH o FADF_UNKNOWN. |
|
Matriz que tiene un tipo variant. El tipo de variante se puede recuperar con SafeArrayGetVartype. |
|
Matriz de BSTR. |
|
Matriz de IUnknown*. |
|
Matriz de IDispatch*. |
|
Matriz de VARIANT. |
|
Bits reservados para uso futuro. |
cbElements
Tamaño de un elemento de matriz.
cLocks
El número de veces que la matriz se ha bloqueado sin un desbloqueo correspondiente.
pvData
Los datos.
rgsabound[1]
Un enlazado para cada dimensión.
Comentarios
La matriz rgsabound se almacena con la dimensión más izquierda en rgsabound[0] y la dimensión más derecha de rgsabound[cDims - 1]
. Si se especificó una matriz en una sintaxis similar a C como [2][5], tendría dos elementos en el vector rgsabound . El elemento 0 tiene un lLbound de 0 y un cElements de 2. El elemento 1 tiene un lLbound de 0 y un cElements de 5.
Las marcas fFeatures describen los atributos de una matriz que pueden afectar a cómo se libera la matriz. El campo fFeatures describe qué tipo de datos se almacenan en SAFEARRAY y cómo se asigna la matriz. Esto permite liberar la matriz sin hacer referencia a su variante contenedora.
Seguridad para subprocesos
Todos los miembros estáticos públicos del tipo de datos SAFEARRAY son seguros para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.
Por ejemplo, considere una aplicación que usa las funciones SafeArrayLock y SafeArrayUnlock . Si estas funciones se llaman simultáneamente desde subprocesos diferentes en la misma instancia de tipo de datos SAFEARRAY , se puede crear un recuento de bloqueos incoherente. Esto hará que la función SafeArrayUnlock devuelva E_UNEXPECTED. Puede evitarlo proporcionando su propio código de sincronización.
Requisitos
Requisito | Valor |
---|---|
Header | oaidl.h |