Partilhar via


CComSafeArray Classe

Observação

A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Esta classe é um envelope para a SAFEARRAY estrutura.

Sintaxe

template <typename T, VARTYPE _vartype = _ATL_AutomationType<T>::type>
class CComSafeArray

Parâmetros

T
O tipo de dados a armazenar no array.

Membros

Construtores Públicos

Nome Description
CComSafeArray::CComSafeArray O construtor.
CComSafeArray::~CComSafeArray O destruidor.

Métodos Públicos

Nome Description
CComSafeArray::Add Adiciona um ou mais elementos, ou uma SAFEARRAY estrutura, a um CComSafeArray.
CComSafeArray::Attach Anexa uma SAFEARRAY estrutura a um CComSafeArray objeto.
CComSafeArray::CopyFrom Copia o conteúdo de uma SAFEARRAY estrutura para dentro do CComSafeArray objeto.
CComSafeArray::CopyTo Cria uma cópia do CComSafeArray objeto.
CComSafeArray::Create Cria um objeto CComSafeArray.
CComSafeArray::Destroy Destrói um CComSafeArray objeto.
CComSafeArray::Detach Desliga a SAFEARRAY de um CComSafeArray objeto.
CComSafeArray::GetAt Recupera um único elemento de um array unidimensional.
CComSafeArray::GetCount Devolve o número de elementos no array.
CComSafeArray::GetDimensions Devolve o número de dimensões na matriz.
CComSafeArray::GetLowerBound Devolve o limite inferior para uma dada dimensão do array.
CComSafeArray::GetSafeArrayPtr Devolve o endereço do m_psa membro de dados.
CComSafeArray::GetType Devolve o tipo de dados armazenados no array.
CComSafeArray::GetUpperBound Devolve o limite superior para qualquer dimensão do array.
CComSafeArray::IsSizable Testa se um CComSafeArray objeto pode ser redimensionado.
CComSafeArray::MultiDimGetAt Recupera um único elemento de um array multidimensional.
CComSafeArray::MultiDimSetAt Define o valor de um elemento num array multidimensional.
CComSafeArray::Resize Redimensiona um CComSafeArray objeto.
CComSafeArray::SetAt Define o valor de um elemento num array unidimensional.

Operadores Públicos

Nome Description
CComSafeArray::operator LPSAFEARRAY Atribui um valor a um SAFEARRAY apontador.
CComSafeArray::operator[] Recupera um elemento do array.
CComSafeArray::operator = Operador de atribuição.

Membros de Dados Públicos

Nome Description
CComSafeArray::m_psa Este membro de dados detém o endereço da SAFEARRAY estrutura.

Observações

CComSafeArray fornece um wrapper para a SAFEARRAY classe de tipo de dados , tornando simples a criação e gestão de arrays unidimensionais e multidimensionais de quase qualquer um dos tipos suportados VARIANT .

CComSafeArray Simplifica a passagem de arrays entre processos e, adicionalmente, proporciona segurança adicional ao verificar os valores do índice de array em relação aos limites superior e inferior.

O limite inferior de a CComSafeArray pode começar em qualquer valor definido pelo utilizador; no entanto, os arrays acedidos através de C++ devem usar um limite inferior de 0. Outras linguagens, como o Visual Basic, podem usar outros valores de delimitação (por exemplo, de -10 a 10).

Use CComSafeArray::Create para criar um CComSafeArray objeto e CComSafeArray::Destroy para o apagar.

A CComSafeArray pode conter o seguinte subconjunto de tipos de VARIANT dados:

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 Ponteiro decimal
VT_VARIANT Ponteiro variante
VT_CY Tipo de dados de moeda

Requerimentos

Cabeçalho:atlsafe.h

Example

// 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

Adiciona um ou mais elementos, ou uma SAFEARRAY estrutura, a um CComSafeArray.

HRESULT Add(const SAFEARRAY* psaSrc);
HRESULT Add(ULONG ulCount, const T* pT, BOOL bCopy = TRUE);
HRESULT Add(const T& t, BOOL bCopy = TRUE);

Parâmetros

psaSrc
Um ponteiro para um SAFEARRAY objeto.

ulCount
O número de objetos a adicionar ao array.

pT
Um apontador para um ou mais objetos a serem adicionados ao array.

t
Uma referência ao objeto a ser adicionado ao array.

bCopy
Indica se deve ser criada uma cópia dos dados. O valor predefinido é TRUE.

Valor de retorno

Retornos S_OK do sucesso, ou um erro HRESULT em caso de falha.

Observações

Os novos objetos são adicionados ao final do objeto existente SAFEARRAY . Adicionar um objeto a um objeto multidimensional SAFEARRAY não é suportado. Ao adicionar um array existente de objectos, ambos os arrays devem conter elementos do mesmo tipo.

O bCopy flag é tido em conta quando elementos do tipo BSTR ou VARIANT são adicionados a um array. O valor padrão de TRUE garante que é feita uma nova cópia dos dados quando o elemento é adicionado ao array.

CComSafeArray::Attach

Anexa uma SAFEARRAY estrutura a um CComSafeArray objeto.

HRESULT Attach(const SAFEARRAY* psaSrc);

Parâmetros

psaSrc
Um apontador para a SAFEARRAY estrutura.

Valor de retorno

Retornos S_OK do sucesso, ou um erro HRESULT em caso de falha.

Observações

Anexa uma SAFEARRAY estrutura a um CComSafeArray objeto, tornando os métodos existentes CComSafeArray disponíveis.

CComSafeArray::CComSafeArray

O construtor.

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);

Parâmetros

bound
Uma SAFEARRAYBOUND estrutura.

ulCount
O número de elementos na matriz.

lLBound
O valor do limite inferior; isto é, o índice do primeiro elemento do array.

pBound
Um ponteiro para uma SAFEARRAYBOUND estrutura.

uDims
A contagem das dimensões na matriz.

saSrc
Uma referência a uma SAFEARRAY estrutura ou CComSafeArray objeto. Em qualquer dos casos, o construtor usa esta referência para fazer uma cópia do array, pelo que o array não é referenciado após a construção.

psaSrc
Um ponteiro para uma SAFEARRAY estrutura. O construtor usa este endereço para fazer uma cópia do array, pelo que o array nunca é referenciado após a construção.

Observações

Cria um objeto CComSafeArray.

CComSafeArray::~CComSafeArray

O destruidor.

~CComSafeArray() throw()

Observações

Liberta todos os recursos alocados.

CComSafeArray::CopyFrom

Copia o conteúdo de uma SAFEARRAY estrutura para dentro do CComSafeArray objeto.

HRESULT CopyFrom(LPSAFEARRAY* ppArray);

Parâmetros

ppArray
Apontar para o SAFEARRAY para copiar.

Valor de retorno

Retornos S_OK do sucesso, ou um erro HRESULT em caso de falha.

Observações

Este método copia o conteúdo de a SAFEARRAY para o objeto atual CComSafeArray . O conteúdo existente do array é substituído.

CComSafeArray::CopyTo

Cria uma cópia do CComSafeArray objeto.

HRESULT CopyTo(LPSAFEARRAY* ppArray);

Parâmetros

ppArray
Um ponteiro para um local onde criar o novo SAFEARRAY.

Valor de retorno

Retornos S_OK do sucesso, ou um erro HRESULT em caso de falha.

Observações

Este método copia o conteúdo de um CComSafeArray objeto numa SAFEARRAY estrutura.

CComSafeArray::Create

Cria um CComSafeArray.

HRESULT Create(const SAFEARRAYBOUND* pBound, UINT uDims = 1);
HRESULT Create(ULONG ulCount = 0, LONG lLBound = 0);

Parâmetros

pBound
Um ponteiro para um SAFEARRAYBOUND objeto.

uDims
O número de dimensões na matriz.

ulCount
O número de elementos na matriz.

lLBound
O valor do limite inferior; isto é, o índice do primeiro elemento do array.

Valor de retorno

Retornos S_OK do sucesso, ou um erro HRESULT em caso de falha.

Observações

Um CComSafeArray objeto pode ser criado a partir de uma estrutura existente SAFEARRAYBOUND e do número de dimensões, ou especificando o número de elementos no array e o limite inferior. Se o array for acedido a partir de C++, o limite inferior deve ser 0. Outras linguagens podem permitir outros valores para o limite inferior (por exemplo, o Visual Basic suporta arrays com elementos com um intervalo como -10 a 10).

CComSafeArray::Destroy

Destrói um CComSafeArray objeto.

HRESULT Destroy();

Valor de retorno

Retornos S_OK do sucesso, ou um erro HRESULT em caso de falha.

Observações

Destrói um objeto existente CComSafeArray e todos os dados que contém.

CComSafeArray::Detach

Desliga a SAFEARRAY de um CComSafeArray objeto.

LPSAFEARRAY Detach();

Valor de retorno

Devolve um ponteiro para um SAFEARRAY objeto.

Observações

Este método separa o SAFEARRAY objeto do objeto CComSafeArray .

CComSafeArray::GetAt

Recupera um único elemento de um array unidimensional.

T& GetAt(LONG lIndex) const;

Parâmetros

lIndex
O número de índice do valor no array a devolver.

Valor de retorno

Devolve uma referência ao elemento do array requerido.

CComSafeArray::GetCount

Devolve o número de elementos no array.

ULONG GetCount(UINT uDim = 0) const;

Parâmetros

uDim
A dimensão do array.

Valor de retorno

Devolve o número de elementos no array.

Observações

Quando usado com um array multidimensional, este método devolve apenas o número de elementos numa dimensão específica.

CComSafeArray::GetDimensions

Devolve o número de dimensões na matriz.

UINT GetDimensions() const;

Valor de retorno

Devolve o número de dimensões na matriz.

CComSafeArray::GetLowerBound

Devolve o limite inferior para uma dada dimensão do array.

LONG GetLowerBound(UINT uDim = 0) const;

Parâmetros

uDim
A dimensão do array para a qual se obtém o limite inferior. Se for omitido, o padrão é 0.

Valor de retorno

Devolve o limite inferior.

Observações

Se o limite inferior for 0, isto indica um array semelhante a C cujo primeiro elemento é o elemento número 0. No caso de um erro, por exemplo, um argumento de dimensão inválido, este método chama AtlThrow com um HRESULT descrevendo o erro.

CComSafeArray::GetSafeArrayPtr

Devolve o endereço do m_psa membro de dados.

LPSAFEARRAY* GetSafeArrayPtr() throw();

Valor de retorno

Devolve um ponteiro para o CComSafeArray::m_psa membro de dados.

CComSafeArray::GetType

Devolve o tipo de dados armazenados no array.

VARTYPE GetType() const;

Valor de retorno

Devolve o tipo de dados armazenados no array, que pode ser qualquer um dos seguintes tipos:

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 Ponteiro decimal
VT_VARIANT Ponteiro variante
VT_CY Tipo de dados de moeda

CComSafeArray::GetUpperBound

Devolve o limite superior para qualquer dimensão do array.

LONG GetUpperBound(UINT uDim = 0) const;

Parâmetros

uDim
A dimensão do array para a qual se obtém o limite superior. Se for omitido, o padrão é 0.

Valor de retorno

Devolve o limite superior. Este valor é inclusivo, o índice máximo válido para esta dimensão.

Observações

No caso de um erro, por exemplo, um argumento de dimensão inválido, este método chama AtlThrow com um HRESULT descrevendo o erro.

CComSafeArray::IsSizable

Testa se um CComSafeArray objeto pode ser redimensionado.

bool IsSizable() const;

Valor de retorno

Retorna TRUE se puder CComSafeArray ser redimensionado, FALSE se não puder.

CComSafeArray::m_psa

Detém o endereço da SAFEARRAY estrutura acedida.

LPSAFEARRAY m_psa;

CComSafeArray::MultiDimGetAt

Recupera um único elemento de um array multidimensional.

HRESULT MultiDimGetAt(const LONG* alIndex, T& t);

Parâmetros

alIndex
Apontar para um vetor de índices para cada dimensão no array. A dimensão mais à esquerda (mais significativa) é alIndex[0].

t
Uma referência aos dados devolvidos.

Valor de retorno

Retornos S_OK do sucesso, ou um erro HRESULT em caso de falha.

CComSafeArray::MultiDimSetAt

Define o valor de um elemento num array multidimensional.

HRESULT MultiDimSetAt(const LONG* alIndex, const T& t);

Parâmetros

alIndex
Apontar para um vetor de índices para cada dimensão no array. A dimensão mais à direita (menos significativa) é alIndex[0].

T
Especifica o valor do novo elemento.

Valor de retorno

Retornos S_OK do sucesso, ou um erro HRESULT em caso de falha.

Observações

Esta é uma versão multidimensional de CComSafeArray::SetAt.

CComSafeArray::operator []

Recupera um elemento do array.

T& operator[](long lindex) const;
T& operator[](int nindex) const;

Parâmetros

lIndex, nIndex
O número de índice do elemento necessário no array.

Valor de retorno

Devolve o elemento do array apropriado.

Observações

Desempenha uma função semelhante a CComSafeArray::GetAt, no entanto, este operador só funciona com arrays unidimensionais.

CComSafeArray::operator =

Operador de atribuição.

ATL::CComSafeArray<T>& operator=(const ATL::CComSafeArray& saSrc);
ATL::CComSafeArray<T>& operator=(const SAFEARRAY* psaSrc);

Parâmetros

saSrc
Uma referência a um objeto CComSafeArray.

psaSrc
Um ponteiro para um SAFEARRAY objeto.

Valor de retorno

Devolve o tipo de dados armazenados no array.

CComSafeArray::operator LPSAFEARRAY

Atribui um valor a um SAFEARRAY apontador.

operator LPSAFEARRAY() const;

Valor de retorno

Atribui um valor a um SAFEARRAY apontador.

CComSafeArray::Resize

Redimensiona um CComSafeArray objeto.

HRESULT Resize(const SAFEARRAYBOUND* pBound);
HRESULT Resize(ULONG ulCount, LONG lLBound = 0);

Parâmetros

pBound
Um apontador para uma SAFEARRAYBOUND estrutura que contém informação sobre o número de elementos e o limite inferior de um array.

ulCount
O número solicitado de objetos na matriz redimensionada.

lLBound
O limite inferior.

Valor de retorno

Retornos S_OK do sucesso, ou um erro HRESULT em caso de falha.

Observações

Este método apenas redimensiona a dimensão mais à direita. Não irá redimensionar arrays que retornam IsResizable como FALSE.

CComSafeArray::SetAt

Define o valor de um elemento num array unidimensional.

HRESULT SetAt(LONG lIndex, const T& t, BOOL bCopy = TRUE);

Parâmetros

lIndex
O número de índice do elemento do array a definir.

t
O novo valor do elemento especificado.

bCopy
Indica se deve ser criada uma cópia dos dados. O valor predefinido é TRUE.

Valor de retorno

Retornos S_OK do sucesso, ou um erro HRESULT em caso de falha.

Observações

O bCopy flag é tido em conta quando elementos do tipo BSTR ou VARIANT são adicionados a um array. O valor padrão de TRUE garante que é feita uma nova cópia dos dados quando o elemento é adicionado ao array.

Consulte também

SAFEARRAY Tipo de Dados
CComSafeArray::Create
CComSafeArray::Destroy
Visão geral da classe