Classe CComSafeArray
Questa classe è un wrapper per la SAFEARRAY
struttura.
Sintassi
template <typename T, VARTYPE _vartype = _ATL_AutomationType<T>::type>
class CComSafeArray
Parametri
T
Tipo di dati da memorizzare nella matrice.
Membri
Costruttori pubblici
Nome | Descrizione |
---|---|
CComSafeArray::CComSafeArray |
Costruttore. |
CComSafeArray::~CComSafeArray |
Distruttore. |
Metodi pubblici
Nome | Descrizione |
---|---|
CComSafeArray::Add |
Aggiunge uno o più elementi, o una SAFEARRAY struttura, a un oggetto CComSafeArray . |
CComSafeArray::Attach |
Associa una SAFEARRAY struttura a un CComSafeArray oggetto . |
CComSafeArray::CopyFrom |
Copia il contenuto di una SAFEARRAY struttura nell'oggetto CComSafeArray . |
CComSafeArray::CopyTo |
Crea una copia dell'oggetto CComSafeArray . |
CComSafeArray::Create |
Crea un oggetto CComSafeArray . |
CComSafeArray::Destroy |
Elimina un oggetto CComSafeArray . |
CComSafeArray::Detach |
Scollega un oggetto SAFEARRAY da un CComSafeArray oggetto . |
CComSafeArray::GetAt |
Recupera un singolo elemento da una matrice unidimensionale. |
CComSafeArray::GetCount |
Restituisce il numero di elementi nella matrice. |
CComSafeArray::GetDimensions |
Restituisce il numero di dimensioni nella matrice. |
CComSafeArray::GetLowerBound |
Restituisce il limite inferiore di una determinata dimensione della matrice. |
CComSafeArray::GetSafeArrayPtr |
Restituisce l'indirizzo del membro dati m_psa . |
CComSafeArray::GetType |
Restituisce il tipo di dati memorizzati nella matrice. |
CComSafeArray::GetUpperBound |
Restituisce il limite superiore di una determinata dimensione della matrice. |
CComSafeArray::IsSizable |
Verifica se è possibile ridimensionare un oggetto CComSafeArray . |
CComSafeArray::MultiDimGetAt |
Recupera un singolo elemento da una matrice multidimensionale. |
CComSafeArray::MultiDimSetAt |
Imposta il valore di un elemento in una matrice multidimensionale. |
CComSafeArray::Resize |
Ridimensiona un oggetto CComSafeArray . |
CComSafeArray::SetAt |
Imposta il valore di un elemento in una matrice unidimensionale. |
Operatori pubblici
Nome | Descrizione |
---|---|
CComSafeArray::operator LPSAFEARRAY |
Esegue il cast di un valore a un SAFEARRAY puntatore. |
CComSafeArray::operator[] |
Recupera un elemento da una matrice. |
CComSafeArray::operator = |
Operatore di assegnazione. |
Membri dati pubblici
Nome | Descrizione |
---|---|
CComSafeArray::m_psa |
Questo membro dati contiene l'indirizzo della SAFEARRAY struttura. |
Osservazioni:
CComSafeArray
fornisce un wrapper per la SAFEARRAY
classe del tipo di dati, semplificando la creazione e la gestione di matrici singole e multidimensionali di quasi tutti i tipi supportati VARIANT
.
CComSafeArray
semplifica il passaggio delle matrici tra processi e fornisce anche protezione aggiuntiva poiché controlla i valori degli indici della matrice rispetto ai limiti superiore e inferiore.
Il limite inferiore di una classe CComSafeArray
può iniziare con qualsiasi valore definito dall'utente; tuttavia, le matrici a cui si accede con C++ usano un limite inferiore pari a 0. Altri linguaggi, quali Visual Basic, possono usare altri valori di delimitazione (ad esempio da -10 a 10).
Usare CComSafeArray::Create
per creare un CComSafeArray
oggetto e CComSafeArray::Destroy
per eliminarlo.
Un CComSafeArray
oggetto può contenere il sottoinsieme di tipi di VARIANT
dati seguente:
VARTYPE |
Descrizione |
---|---|
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 |
Puntatore decimale |
VT_VARIANT |
Puntatore Variant |
VT_CY |
Currency (tipo di dati) |
Requisiti
Intestazione: atlsafe.h
Esempio
// 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
Aggiunge uno o più elementi, o una SAFEARRAY
struttura, a un oggetto CComSafeArray
.
HRESULT Add(const SAFEARRAY* psaSrc);
HRESULT Add(ULONG ulCount, const T* pT, BOOL bCopy = TRUE);
HRESULT Add(const T& t, BOOL bCopy = TRUE);
Parametri
psaSrc
Puntatore a un oggetto SAFEARRAY
.
ulCount
Numero di oggetti da aggiungere alla matrice.
pT
Puntatore a uno o più oggetti da aggiungere alla matrice.
t
Riferimento all'oggetto da aggiungere alla matrice.
bCopy
Indica se deve essere creata una copia dei dati. Il valore predefinito è TRUE
.
Valore restituito
Restituisce S_OK
l'esito positivo o un errore in caso di errore HRESULT
.
Osservazioni:
I nuovi oggetti vengono accodati alla fine dell'oggetto esistente SAFEARRAY
. L'aggiunta di un oggetto a un oggetto multidimensionale SAFEARRAY
non è supportata. Quando si aggiunge una matrice di oggetti esistente, entrambe le matrici devono contenere elementi dello stesso tipo.
Il bCopy
flag viene preso in considerazione quando gli elementi di tipo BSTR
o VARIANT
vengono aggiunti a una matrice. Il valore predefinito di TRUE
garantisce che venga creata una nuova copia dei dati quando l'elemento viene aggiunto alla matrice.
CComSafeArray::Attach
Associa una SAFEARRAY
struttura a un CComSafeArray
oggetto .
HRESULT Attach(const SAFEARRAY* psaSrc);
Parametri
psaSrc
Puntatore alla SAFEARRAY
struttura.
Valore restituito
Restituisce S_OK
l'esito positivo o un errore in caso di errore HRESULT
.
Osservazioni:
Associa una SAFEARRAY
struttura a un CComSafeArray
oggetto, rendendo disponibili i metodi esistenti CComSafeArray
.
CComSafeArray::CComSafeArray
Costruttore.
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);
Parametri
bound
Struttura SAFEARRAYBOUND
.
ulCount
Numero di elementi nella matrice.
lLBound
Valore limite inferiore; ovvero l'indice del primo elemento nella matrice.
pBound
Puntatore a una SAFEARRAYBOUND
struttura.
uDims
Conteggio delle dimensioni nella matrice.
saSrc
Riferimento a una struttura o CComSafeArray
a un SAFEARRAY
oggetto . In entrambi i casi, il costruttore usa questo riferimento per creare una copia della matrice, quindi la matrice non viene fatto riferimento dopo la costruzione.
psaSrc
Puntatore a una SAFEARRAY
struttura. Il costruttore usa questo indirizzo per creare una copia della matrice, quindi la matrice non viene mai fatto riferimento dopo la costruzione.
Osservazioni:
Crea un oggetto CComSafeArray
.
CComSafeArray::~CComSafeArray
Distruttore.
~CComSafeArray() throw()
Osservazioni:
Libera tutte le risorse allocate.
CComSafeArray::CopyFrom
Copia il contenuto di una SAFEARRAY
struttura nell'oggetto CComSafeArray
.
HRESULT CopyFrom(LPSAFEARRAY* ppArray);
Parametri
ppArray
Puntatore all'oggetto SAFEARRAY
da copiare.
Valore restituito
Restituisce S_OK
l'esito positivo o un errore in caso di errore HRESULT
.
Osservazioni:
Questo metodo copia il contenuto di un SAFEARRAY
oggetto nell'oggetto corrente CComSafeArray
. Il contenuto esistente della matrice viene sostituito.
CComSafeArray::CopyTo
Crea una copia dell'oggetto CComSafeArray
.
HRESULT CopyTo(LPSAFEARRAY* ppArray);
Parametri
ppArray
Puntatore a una posizione in cui creare il nuovo SAFEARRAY
oggetto .
Valore restituito
Restituisce S_OK
l'esito positivo o un errore in caso di errore HRESULT
.
Osservazioni:
Questo metodo copia il contenuto di un CComSafeArray
oggetto in una SAFEARRAY
struttura.
CComSafeArray::Create
Crea un oggetto CComSafeArray
.
HRESULT Create(const SAFEARRAYBOUND* pBound, UINT uDims = 1);
HRESULT Create(ULONG ulCount = 0, LONG lLBound = 0);
Parametri
pBound
Puntatore a un oggetto SAFEARRAYBOUND
.
uDims
Numero di dimensioni nella matrice.
ulCount
Numero di elementi nella matrice.
lLBound
Valore limite inferiore; ovvero l'indice del primo elemento nella matrice.
Valore restituito
Restituisce S_OK
l'esito positivo o un errore in caso di errore HRESULT
.
Osservazioni:
Un CComSafeArray
oggetto può essere creato da una struttura esistente SAFEARRAYBOUND
e dal numero di dimensioni oppure specificando il numero di elementi nella matrice e il limite inferiore. Se è necessario accedere alla matrice da C++, il limite inferiore deve essere 0. Altri linguaggi possono consentire altri valori per il limite inferiore, ad esempio Visual Basic supporta matrici con elementi con un intervallo compreso tra -10 e 10.
CComSafeArray::Destroy
Elimina un oggetto CComSafeArray
.
HRESULT Destroy();
Valore restituito
Restituisce S_OK
l'esito positivo o un errore in caso di errore HRESULT
.
Osservazioni:
Elimina definitivamente un oggetto esistente CComSafeArray
e tutti i dati contenuti.
CComSafeArray::Detach
Scollega un oggetto SAFEARRAY
da un CComSafeArray
oggetto .
LPSAFEARRAY Detach();
Valore restituito
Restituisce un puntatore a un SAFEARRAY
oggetto .
Osservazioni:
Questo metodo scollega l'oggetto SAFEARRAY
dall'oggetto CComSafeArray
.
CComSafeArray::GetAt
Recupera un singolo elemento da una matrice unidimensionale.
T& GetAt(LONG lIndex) const;
Parametri
lIndex
Numero di indice del valore nella matrice da restituire.
Valore restituito
Restituisce un riferimento all'elemento della matrice richiesto.
CComSafeArray::GetCount
Restituisce il numero di elementi nella matrice.
ULONG GetCount(UINT uDim = 0) const;
Parametri
uDim
Dimensione della matrice.
Valore restituito
Restituisce il numero di elementi nella matrice.
Osservazioni:
Se utilizzato con una matrice multidimensionale, questo metodo restituirà solo il numero di elementi in una dimensione specifica.
CComSafeArray::GetDimensions
Restituisce il numero di dimensioni nella matrice.
UINT GetDimensions() const;
Valore restituito
Restituisce il numero di dimensioni nella matrice.
CComSafeArray::GetLowerBound
Restituisce il limite inferiore di una determinata dimensione della matrice.
LONG GetLowerBound(UINT uDim = 0) const;
Parametri
uDim
Dimensione della matrice per la quale ottenere il limite inferiore. Se omesso, il valore predefinito è 0.
Valore restituito
Restituisce il limite inferiore.
Osservazioni:
Se il limite inferiore è 0, indica una matrice simile a C il cui primo elemento è il numero di elemento 0. In caso di errore, ad esempio, un argomento di dimensione non valido, questo metodo chiama AtlThrow
con un oggetto HRESULT
che descrive l'errore.
CComSafeArray::GetSafeArrayPtr
Restituisce l'indirizzo del membro dati m_psa
.
LPSAFEARRAY* GetSafeArrayPtr() throw();
Valore restituito
Restituisce un puntatore al CComSafeArray::m_psa
membro dati.
CComSafeArray::GetType
Restituisce il tipo di dati memorizzati nella matrice.
VARTYPE GetType() const;
Valore restituito
Restituisce il tipo di dati archiviati nella matrice, che può essere uno dei tipi seguenti:
VARTYPE |
Descrizione |
---|---|
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 |
Puntatore decimale |
VT_VARIANT |
Puntatore Variant |
VT_CY |
Currency (tipo di dati) |
CComSafeArray::GetUpperBound
Restituisce il limite superiore di una determinata dimensione della matrice.
LONG GetUpperBound(UINT uDim = 0) const;
Parametri
uDim
Dimensione della matrice per la quale ottenere il limite superiore. Se omesso, il valore predefinito è 0.
Valore restituito
Restituisce il limite superiore. Questo valore è inclusivo, ovvero l'indice massimo valido per questa dimensione.
Osservazioni:
In caso di errore, ad esempio, un argomento di dimensione non valido, questo metodo chiama AtlThrow
con un oggetto HRESULT
che descrive l'errore.
CComSafeArray::IsSizable
Verifica se è possibile ridimensionare un oggetto CComSafeArray
.
bool IsSizable() const;
Valore restituito
Restituisce TRUE
se l'oggetto CComSafeArray
può essere ridimensionato, FALSE
se non è possibile.
CComSafeArray::m_psa
Contiene l'indirizzo della SAFEARRAY
struttura a cui si accede.
LPSAFEARRAY m_psa;
CComSafeArray::MultiDimGetAt
Recupera un singolo elemento da una matrice multidimensionale.
HRESULT MultiDimGetAt(const LONG* alIndex, T& t);
Parametri
alIndex
Puntatore a un vettore di indici per ogni dimensione nella matrice. La dimensione più a sinistra (più significativa) è alIndex[0]
.
t
Riferimento ai dati restituiti.
Valore restituito
Restituisce S_OK
l'esito positivo o un errore in caso di errore HRESULT
.
CComSafeArray::MultiDimSetAt
Imposta il valore di un elemento in una matrice multidimensionale.
HRESULT MultiDimSetAt(const LONG* alIndex, const T& t);
Parametri
alIndex
Puntatore a un vettore di indici per ogni dimensione nella matrice. La dimensione più a destra (meno significativa) è alIndex[0]
.
T
Specifica il valore del nuovo elemento.
Valore restituito
Restituisce S_OK
l'esito positivo o un errore in caso di errore HRESULT
.
Osservazioni:
Si tratta di una versione multidimensionale di CComSafeArray::SetAt
.
CComSafeArray::operator []
Recupera un elemento da una matrice.
T& operator[](long lindex) const;
T& operator[]int nindex) const;
Parametri
lIndex
, nIndex
Numero di indice dell'elemento obbligatorio nella matrice.
Valore restituito
Restituisce l'elemento di matrice appropriato.
Osservazioni:
Esegue una funzione simile a CComSafeArray::GetAt
, ma questo operatore funziona solo con matrici unidimensionali.
CComSafeArray::operator =
Operatore di assegnazione.
ATL::CComSafeArray<T>& operator=(const ATL::CComSafeArray& saSrc);
ATL::CComSafeArray<T>& operator=(const SAFEARRAY* psaSrc);
Parametri
saSrc
Riferimento a un oggetto CComSafeArray
.
psaSrc
Puntatore a un oggetto SAFEARRAY
.
Valore restituito
Restituisce il tipo di dati memorizzati nella matrice.
CComSafeArray::operator LPSAFEARRAY
Esegue il cast di un valore a un SAFEARRAY
puntatore.
operator LPSAFEARRAY() const;
Valore restituito
Esegue il cast di un valore a un SAFEARRAY
puntatore.
CComSafeArray::Resize
Ridimensiona un oggetto CComSafeArray
.
HRESULT Resize(const SAFEARRAYBOUND* pBound);
HRESULT Resize(ULONG ulCount, LONG lLBound = 0);
Parametri
pBound
Puntatore a una SAFEARRAYBOUND
struttura che contiene informazioni sul numero di elementi e sul limite inferiore di una matrice.
ulCount
Numero richiesto di oggetti nella matrice ridimensionata.
lLBound
Limite inferiore.
Valore restituito
Restituisce S_OK
l'esito positivo o un errore in caso di errore HRESULT
.
Osservazioni:
Questo metodo ridimensiona solo la dimensione più a destra. Non ridimensiona le matrici che restituiscono IsResizable
come FALSE
.
CComSafeArray::SetAt
Imposta il valore di un elemento in una matrice unidimensionale.
HRESULT SetAt(LONG lIndex, const T& t, BOOL bCopy = TRUE);
Parametri
lIndex
Numero di indice dell'elemento della matrice da impostare.
t
Nuovo valore dell'elemento specificato.
bCopy
Indica se deve essere creata una copia dei dati. Il valore predefinito è TRUE
.
Valore restituito
Restituisce S_OK
l'esito positivo o un errore in caso di errore HRESULT
.
Osservazioni:
Il bCopy
flag viene preso in considerazione quando gli elementi di tipo BSTR
o VARIANT
vengono aggiunti a una matrice. Il valore predefinito di TRUE
garantisce che venga creata una nuova copia dei dati quando l'elemento viene aggiunto alla matrice.
Vedi anche
SAFEARRAY
Tipo di dati
CComSafeArray::Create
CComSafeArray::Destroy
Cenni preliminari sulla classe