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
FADF_AUTO
0x0001
Matriz que se asigna en la pila.
FADF_STATIC
0x0002
Matriz que se asigna estáticamente.
FADF_EMBEDDED
0x0004
Matriz incrustada en una estructura.
FADF_FIXEDSIZE
0x0010
Matriz que no se puede cambiar de tamaño ni reasignar.
FADF_RECORD
0x0020
Matriz que contiene registros. Cuando se establece, habrá un puntero a la interfaz IRecordInfo en desplazamiento negativo 4 en el descriptor de matriz.
FADF_HAVEIID
0x0040
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.
FADF_HAVEVARTYPE
0x0080
Matriz que tiene un tipo variant. El tipo de variante se puede recuperar con SafeArrayGetVartype.
FADF_BSTR
0x0100
Matriz de BSTR.
FADF_UNKNOWN
0x0200
Matriz de IUnknown*.
FADF_DISPATCH
0x0400
Matriz de IDispatch*.
FADF_VARIANT
0x0800
Matriz de VARIANT.
FADF_RESERVED
0xF008
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