La classe CComSafeArray
Cette classe est un wrapper pour la SAFEARRAY
structure.
Syntaxe
template <typename T, VARTYPE _vartype = _ATL_AutomationType<T>::type>
class CComSafeArray
Paramètres
T
Type de données à stocker dans le tableau.
Membres
Constructeurs publics
Nom | Description |
---|---|
CComSafeArray::CComSafeArray |
Constructeur . |
CComSafeArray::~CComSafeArray |
Destructeur. |
Méthodes publiques
Nom | Description |
---|---|
CComSafeArray::Add |
Ajoute un ou plusieurs éléments, ou une SAFEARRAY structure, à un CComSafeArray . |
CComSafeArray::Attach |
Attache une SAFEARRAY structure à un CComSafeArray objet. |
CComSafeArray::CopyFrom |
Copie le contenu d’une SAFEARRAY structure dans l’objet CComSafeArray . |
CComSafeArray::CopyTo |
Crée une copie de l'objet CComSafeArray . |
CComSafeArray::Create |
Crée un objet CComSafeArray . |
CComSafeArray::Destroy |
Détruit un objet CComSafeArray . |
CComSafeArray::Detach |
Détache un SAFEARRAY CComSafeArray objet. |
CComSafeArray::GetAt |
Récupère un élément unique à partir d’un tableau unidimensionnel. |
CComSafeArray::GetCount |
Retourne le nombre d'éléments du tableau. |
CComSafeArray::GetDimensions |
Retourne le nombre de dimensions du tableau. |
CComSafeArray::GetLowerBound |
Retourne la limite inférieure d’une dimension donnée du tableau. |
CComSafeArray::GetSafeArrayPtr |
Retourne l’adresse du membre de données m_psa . |
CComSafeArray::GetType |
Retourne le type de données stocké dans le tableau. |
CComSafeArray::GetUpperBound |
Retourne la limite supérieure d’une dimension du tableau. |
CComSafeArray::IsSizable |
Teste si un objet CComSafeArray peut être redimensionné. |
CComSafeArray::MultiDimGetAt |
Récupère un élément unique à partir d’un tableau multidimensionnel. |
CComSafeArray::MultiDimSetAt |
Définit la valeur d’un élément d’un tableau multidimensionnel. |
CComSafeArray::Resize |
Redimensionne un objet CComSafeArray . |
CComSafeArray::SetAt |
Définit la valeur d’un élément d’un tableau unidimensionnel. |
Opérateurs publics
Nom | Description |
---|---|
CComSafeArray::operator LPSAFEARRAY |
Convertit une valeur en pointeur SAFEARRAY . |
CComSafeArray::operator[] |
Récupère un élément du tableau. |
CComSafeArray::operator = |
Opérateur d'assignation. |
Membres de données publics
Nom | Description |
---|---|
CComSafeArray::m_psa |
Ce membre de données contient l’adresse de la SAFEARRAY structure. |
Notes
CComSafeArray
fournit un wrapper pour la SAFEARRAY
classe de type de données, ce qui permet de créer et de gérer des tableaux multidimensionnels uniques et multidimensionnels de presque tous les types pris en charge VARIANT
.
CComSafeArray
simplifie le transmission de tableaux entre processus et offre en outre une sécurité renforcée en vérifiant les valeurs d’index de tableau par rapport aux limites inférieure et supérieure.
La limite inférieure d’un CComSafeArray
peut commencer à n’importe quelle valeur définie par l’utilisateur ; cependant, les tableaux accessibles via C++ doivent utiliser une limite inférieure de 0. D’autres langages comme Visual Basic peuvent utiliser d’autres valeurs de délimitation (par exemple, de -10 à 10).
Permet CComSafeArray::Create
de créer un CComSafeArray
objet et CComSafeArray::Destroy
de le supprimer.
Un CComSafeArray
peut contenir le sous-ensemble suivant de types de VARIANT
données :
VARTYPE |
Description |
---|---|
VT_I1 |
char |
VT_I2 |
short |
VT_I4 |
int |
VT_I4 |
long |
VT_I8 |
longlong |
VT_UI1 |
byte |
VT_UI2 |
ushort |
VT_UI4 |
uint |
VT_UI4 |
ulong |
VT_UI8 |
ulonglong |
VT_R4 |
float |
VT_R8 |
double |
VT_DECIMAL |
pointeur décimal |
VT_VARIANT |
pointeur de type Variant |
VT_CY |
Currency (type de données) |
Spécifications
En-tête : atlsafe.h
Exemple
// Create a multidimensional array,
// then write and read elements
// Define an array of character pointers
CComSafeArray<char> *pSar;
char cElement;
char cTable[2][3] = {'A','B','C','D','E','F'};
// Declare the variable used to store the
// array indexes
LONG aIndex[2];
// Define the array bound structure
CComSafeArrayBound bound[2];
bound[0].SetCount(2);
bound[0].SetLowerBound(0);
bound[1].SetCount(3);
bound[1].SetLowerBound(0);
// Create a new 2 dimensional array
// each dimension size is 3
pSar = new CComSafeArray<char>(bound,2);
// Use MultiDimSetAt to store characters in the array
for (int x = 0; x < 2; x++)
{
for (int y = 0; y < 3; y++)
{
aIndex[0] = x;
aIndex[1] = y;
HRESULT hr = pSar->MultiDimSetAt(aIndex,cTable[x][y]);
ATLASSERT(hr == S_OK);
}
}
// Use MultiDimGetAt to retrieve characters in the array
for (int x = 0; x < 2; x++)
{
for (int y = 0; y < 3; y++)
{
aIndex[0]=x;
aIndex[1]=y;
HRESULT hr = pSar->MultiDimGetAt(aIndex,cElement);
ATLASSERT(hr == S_OK);
ATLASSERT(cElement == cTable[x][y]);
}
}
CComSafeArray::Add
Ajoute un ou plusieurs éléments, ou une SAFEARRAY
structure, à un CComSafeArray
.
HRESULT Add(const SAFEARRAY* psaSrc);
HRESULT Add(ULONG ulCount, const T* pT, BOOL bCopy = TRUE);
HRESULT Add(const T& t, BOOL bCopy = TRUE);
Paramètres
psaSrc
Pointeur vers un objet SAFEARRAY
.
ulCount
Nombre d’objets à ajouter au tableau.
pT
Pointeur vers un ou plusieurs objets à ajouter au tableau.
t
Référence à l’objet à ajouter au tableau.
bCopy
Indique si une copie des données doit être créée. La valeur par défaut est TRUE
.
Valeur retournée
Retourne S_OK
la réussite ou une erreur en cas d’échec HRESULT
.
Notes
Les nouveaux objets sont ajoutés à la fin de l’objet existant SAFEARRAY
. L’ajout d’un objet à un objet multidimensionnel SAFEARRAY
n’est pas pris en charge. Lors de l’ajout d’un tableau d’objets existant, les deux tableaux doivent contenir des éléments du même type.
L’indicateur bCopy
est pris en compte lorsque des éléments de type BSTR
ou VARIANT
sont ajoutés à un tableau. La valeur par défaut garantit TRUE
qu’une nouvelle copie est faite des données lorsque l’élément est ajouté au tableau.
CComSafeArray::Attach
Attache une SAFEARRAY
structure à un CComSafeArray
objet.
HRESULT Attach(const SAFEARRAY* psaSrc);
Paramètres
psaSrc
Pointeur vers la SAFEARRAY
structure.
Valeur retournée
Retourne S_OK
la réussite ou une erreur en cas d’échec HRESULT
.
Notes
Attache une SAFEARRAY
structure à un CComSafeArray
objet, rendant les méthodes existantes CComSafeArray
disponibles.
CComSafeArray::CComSafeArray
Constructeur .
CComSafeArray();
CComSafeArray(const SAFEARRAYBOUND& bound);
CComSafeArray(ULONG ulCount, LONG lLBound = 0);
CComSafeArray(const SAFEARRAYBOUND* pBound, UINT uDims = 1);
CComSafeArray(const CComSafeArray& saSrc);
CComSafeArray(const SAFEARRAY& saSrc);
CComSafeArray(const SAFEARRAY* psaSrc);
Paramètres
bound
Structure SAFEARRAYBOUND
.
ulCount
Nombre d’éléments dans le tableau.
lLBound
Valeur limite inférieure ; autrement dit, l’index du premier élément du tableau.
pBound
Pointeur vers une SAFEARRAYBOUND
structure.
uDims
Nombre de dimensions dans le tableau.
saSrc
Référence à une structure ou CComSafeArray
à un SAFEARRAY
objet. Dans les deux cas, le constructeur utilise cette référence pour effectuer une copie du tableau, de sorte que le tableau n’est pas référencé après la construction.
psaSrc
Pointeur vers une SAFEARRAY
structure. Le constructeur utilise cette adresse pour effectuer une copie du tableau, de sorte que le tableau n’est jamais référencé après la construction.
Notes
Crée un objet CComSafeArray
.
CComSafeArray::~CComSafeArray
Destructeur.
~CComSafeArray() throw()
Notes
Libère toutes les ressources allouées.
CComSafeArray::CopyFrom
Copie le contenu d’une SAFEARRAY
structure dans l’objet CComSafeArray
.
HRESULT CopyFrom(LPSAFEARRAY* ppArray);
Paramètres
ppArray
Pointeur vers la SAFEARRAY
copie.
Valeur retournée
Retourne S_OK
la réussite ou une erreur en cas d’échec HRESULT
.
Notes
Cette méthode copie le contenu d’un SAFEARRAY
objet actif CComSafeArray
. Le contenu existant du tableau est remplacé.
CComSafeArray::CopyTo
Crée une copie de l'objet CComSafeArray
.
HRESULT CopyTo(LPSAFEARRAY* ppArray);
Paramètres
ppArray
Pointeur vers un emplacement dans lequel créer le nouveau SAFEARRAY
.
Valeur retournée
Retourne S_OK
la réussite ou une erreur en cas d’échec HRESULT
.
Notes
Cette méthode copie le contenu d’un CComSafeArray
objet dans une SAFEARRAY
structure.
CComSafeArray::Create
Crée un CComSafeArray
.
HRESULT Create(const SAFEARRAYBOUND* pBound, UINT uDims = 1);
HRESULT Create(ULONG ulCount = 0, LONG lLBound = 0);
Paramètres
pBound
Pointeur vers un objet SAFEARRAYBOUND
.
uDims
Nombre de dimensions dans le tableau.
ulCount
Nombre d’éléments dans le tableau.
lLBound
Valeur limite inférieure ; autrement dit, l’index du premier élément du tableau.
Valeur retournée
Retourne S_OK
la réussite ou une erreur en cas d’échec HRESULT
.
Notes
Un CComSafeArray
objet peut être créé à partir d’une structure existante SAFEARRAYBOUND
et du nombre de dimensions, ou en spécifiant le nombre d’éléments dans le tableau et la limite inférieure. Si le tableau est accessible à partir de C++, la limite inférieure doit être 0. D’autres langages peuvent autoriser d’autres valeurs pour la limite inférieure (par exemple, Visual Basic prend en charge les tableaux avec des éléments avec une plage telle que -10 à 10).
CComSafeArray::Destroy
Détruit un objet CComSafeArray
.
HRESULT Destroy();
Valeur retournée
Retourne S_OK
la réussite ou une erreur en cas d’échec HRESULT
.
Notes
Détruit un objet existant CComSafeArray
et toutes les données qu’il contient.
CComSafeArray::Detach
Détache un SAFEARRAY
CComSafeArray
objet.
LPSAFEARRAY Detach();
Valeur retournée
Retourne un pointeur vers un SAFEARRAY
objet.
Notes
Cette méthode détache l’objet SAFEARRAY
de l’objet CComSafeArray
.
CComSafeArray::GetAt
Récupère un élément unique à partir d’un tableau unidimensionnel.
T& GetAt(LONG lIndex) const;
Paramètres
lIndex
Numéro d’index de la valeur dans le tableau à retourner.
Valeur retournée
Retourne une référence à l’élément de tableau requis.
CComSafeArray::GetCount
Retourne le nombre d'éléments du tableau.
ULONG GetCount(UINT uDim = 0) const;
Paramètres
uDim
Dimension de tableau.
Valeur retournée
Retourne le nombre d'éléments du tableau.
Notes
Lorsqu’elle est utilisée avec un tableau multidimensionnel, cette méthode retourne le nombre d’éléments dans une dimension spécifique uniquement.
CComSafeArray::GetDimensions
Retourne le nombre de dimensions du tableau.
UINT GetDimensions() const;
Valeur retournée
Retourne le nombre de dimensions du tableau.
CComSafeArray::GetLowerBound
Retourne la limite inférieure d’une dimension donnée du tableau.
LONG GetLowerBound(UINT uDim = 0) const;
Paramètres
uDim
Dimension de tableau pour laquelle obtenir la limite inférieure. S’il est omis, la valeur par défaut est 0.
Valeur retournée
Retourne la limite inférieure.
Notes
Si la limite inférieure est 0, cela indique un tableau de type C dont le premier élément est le numéro d’élément 0. En cas d’erreur, par exemple, un argument de dimension non valide, cette méthode appelle AtlThrow
avec une HRESULT
description de l’erreur.
CComSafeArray::GetSafeArrayPtr
Retourne l’adresse du membre de données m_psa
.
LPSAFEARRAY* GetSafeArrayPtr() throw();
Valeur retournée
Retourne un pointeur vers le membre de CComSafeArray::m_psa
données.
CComSafeArray::GetType
Retourne le type de données stocké dans le tableau.
VARTYPE GetType() const;
Valeur retournée
Retourne le type de données stockées dans le tableau, qui peut être l’un des types suivants :
VARTYPE |
Description |
---|---|
VT_I1 |
char |
VT_I2 |
short |
VT_I4 |
int |
VT_I4 |
long |
VT_I8 |
longlong |
VT_UI1 |
byte |
VT_UI2 |
ushort |
VT_UI4 |
uint |
VT_UI4 |
ulong |
VT_UI8 |
ulonglong |
VT_R4 |
float |
VT_R8 |
double |
VT_DECIMAL |
pointeur décimal |
VT_VARIANT |
pointeur de type Variant |
VT_CY |
Currency (type de données) |
CComSafeArray::GetUpperBound
Retourne la limite supérieure d’une dimension du tableau.
LONG GetUpperBound(UINT uDim = 0) const;
Paramètres
uDim
Dimension de tableau pour laquelle obtenir la limite supérieure. S’il est omis, la valeur par défaut est 0.
Valeur retournée
Retourne la limite supérieure. Cette valeur est inclusive, l’index valide maximal pour cette dimension.
Notes
En cas d’erreur, par exemple, un argument de dimension non valide, cette méthode appelle AtlThrow
avec une HRESULT
description de l’erreur.
CComSafeArray::IsSizable
Teste si un objet CComSafeArray
peut être redimensionné.
bool IsSizable() const;
Valeur retournée
Retourne TRUE
si la valeur CComSafeArray
peut être redimensionnée, FALSE
si elle ne peut pas être redimensionnée.
CComSafeArray::m_psa
Contient l’adresse de la SAFEARRAY
structure accessible.
LPSAFEARRAY m_psa;
CComSafeArray::MultiDimGetAt
Récupère un élément unique à partir d’un tableau multidimensionnel.
HRESULT MultiDimGetAt(const LONG* alIndex, T& t);
Paramètres
alIndex
Pointeur vers un vecteur d’index pour chaque dimension du tableau. La dimension la plus à gauche (la plus importante) est alIndex[0]
.
t
Référence aux données retournées.
Valeur retournée
Retourne S_OK
la réussite ou une erreur en cas d’échec HRESULT
.
CComSafeArray::MultiDimSetAt
Définit la valeur d’un élément d’un tableau multidimensionnel.
HRESULT MultiDimSetAt(const LONG* alIndex, const T& t);
Paramètres
alIndex
Pointeur vers un vecteur d’index pour chaque dimension du tableau. La dimension la plus à droite (la moins significative) est alIndex[0]
.
T
Spécifie la valeur du nouvel élément.
Valeur retournée
Retourne S_OK
la réussite ou une erreur en cas d’échec HRESULT
.
Notes
Il s’agit d’une version multidimensionnelle de CComSafeArray::SetAt
.
CComSafeArray::operator []
Récupère un élément du tableau.
T& operator[](long lindex) const;
T& operator[]int nindex) const;
Paramètres
lIndex
, nIndex
Numéro d’index de l’élément requis dans le tableau.
Valeur retournée
Retourne l’élément de tableau approprié.
Notes
Effectue une fonction similaire à CComSafeArray::GetAt
, mais cet opérateur fonctionne uniquement avec des tableaux unidimensionnels.
CComSafeArray::operator =
Opérateur d'assignation.
ATL::CComSafeArray<T>& operator=(const ATL::CComSafeArray& saSrc);
ATL::CComSafeArray<T>& operator=(const SAFEARRAY* psaSrc);
Paramètres
saSrc
Référence à un objet CComSafeArray
.
psaSrc
Pointeur vers un objet SAFEARRAY
.
Valeur retournée
Retourne le type de données stocké dans le tableau.
CComSafeArray::operator LPSAFEARRAY
Convertit une valeur en pointeur SAFEARRAY
.
operator LPSAFEARRAY() const;
Valeur retournée
Convertit une valeur en pointeur SAFEARRAY
.
CComSafeArray::Resize
Redimensionne un objet CComSafeArray
.
HRESULT Resize(const SAFEARRAYBOUND* pBound);
HRESULT Resize(ULONG ulCount, LONG lLBound = 0);
Paramètres
pBound
Pointeur vers une SAFEARRAYBOUND
structure qui contient des informations sur le nombre d’éléments et la limite inférieure d’un tableau.
ulCount
Nombre demandé d’objets dans le tableau redimensionné.
lLBound
Limite inférieure.
Valeur retournée
Retourne S_OK
la réussite ou une erreur en cas d’échec HRESULT
.
Notes
Cette méthode redimensionne uniquement la dimension la plus à droite. Il ne redimensionne pas les tableaux qui retournent IsResizable
en tant que FALSE
.
CComSafeArray::SetAt
Définit la valeur d’un élément d’un tableau unidimensionnel.
HRESULT SetAt(LONG lIndex, const T& t, BOOL bCopy = TRUE);
Paramètres
lIndex
Numéro d’index de l’élément de tableau à définir.
t
Nouvelle valeur de l’élément spécifié.
bCopy
Indique si une copie des données doit être créée. La valeur par défaut est TRUE
.
Valeur retournée
Retourne S_OK
la réussite ou une erreur en cas d’échec HRESULT
.
Notes
L’indicateur bCopy
est pris en compte lorsque des éléments de type BSTR
ou VARIANT
sont ajoutés à un tableau. La valeur par défaut garantit TRUE
qu’une nouvelle copie est faite des données lorsque l’élément est ajouté au tableau.
Voir aussi
SAFEARRAY
Type de données
CComSafeArray::Create
CComSafeArray::Destroy
Vue d’ensemble de la classe