Structure SAFEARRAY (oaidl.h)

Représente un tableau sécurisé.

Syntaxe

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

Membres

cDims

Nombre de dimensions.

fFeatures

Drapeaux.

Valeur Signification
FADF_AUTO
0x0001
Tableau alloué sur la pile.
FADF_STATIC
0x0002
Tableau alloué de manière statique.
FADF_EMBEDDED
0x0004
Tableau incorporé dans une structure.
FADF_FIXEDSIZE
0x0010
Tableau qui ne peut pas être redimensionné ou réaffecté.
FADF_RECORD
0x0020
Tableau qui contient des enregistrements. Lorsqu’il est défini, un pointeur vers l’interface IRecordInfo se trouve au décalage négatif 4 dans le descripteur de tableau.
FADF_HAVEIID
0x0040
Tableau qui a une interface d’identification IID. Une fois défini, il y a un GUID au décalage négatif 16 dans le descripteur de tableau sécurisé. L’indicateur n’est défini que lorsque FADF_DISPATCH ou FADF_UNKNOWN est également défini.
FADF_HAVEVARTYPE
0x0080
Tableau qui a un type variant. Le type de variante peut être récupéré avec SafeArrayGetVartype.
FADF_BSTR
0x0100
Tableau de BSTR.
FADF_UNKNOWN
0x0200
Tableau d’IUnknown*.
FADF_DISPATCH
0x0400
Tableau d’IDispatch*.
FADF_VARIANT
0x0800
Tableau de VARIANTs.
FADF_RESERVED
0xF008
Bits réservés pour une utilisation ultérieure.

cbElements

Taille d’un élément de tableau.

cLocks

Nombre de fois que le tableau a été verrouillé sans déverrouillage correspondant.

pvData

Données.

rgsabound[1]

Une limite pour chaque dimension.

Remarques

Le tableau rgsabound est stocké avec la dimension la plus à gauche dans rgsabound[0] et la dimension la plus à droite dans rgsabound[cDims - 1]. Si un tableau a été spécifié dans une syntaxe de type C en tant que [2][5], il aurait deux éléments dans le vecteur rgsabound . L’élément 0 a une valeur lLbound de 0 et un élément cElements de 2. L’élément 1 a un lLbound de 0 et un cElements de 5.

Les indicateurs fFeatures décrivent les attributs d’un tableau qui peuvent affecter la façon dont le tableau est libéré. Le champ fFeatures décrit le type de données stocké dans safeARRAY et la façon dont le tableau est alloué. Cela permet de libérer le tableau sans référencer sa variante contenante.

Cohérence de thread

Tous les membres statiques publics du type de données SAFEARRAY sont thread safe. Il n’est pas garanti que les membres de l’instance soient thread safe.

Par exemple, considérez une application qui utilise les fonctions SafeArrayLock et SafeArrayUnlock . Si ces fonctions sont appelées simultanément à partir de threads différents sur le même type de données SAFEARRAY instance, un nombre de verrous incohérent peut être créé. La fonction SafeArrayUnlock retourne alors E_UNEXPECTED. Vous pouvez empêcher cela en fournissant votre propre code de synchronisation.

Configuration requise

Condition requise Valeur
En-tête oaidl.h