Compartilhar via


SafeArrayPutElement

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

Essa função atribui um único elemento de matriz.

Syntax

HRESULT SafeArrayPutElement(
  SAFEARRAY FAR* psa, 
  long FAR* rgIndices, 
  void FAR* pv 
);

Parameters

  • psa
    [no] Ponteiro para uma descritor de matriz criado por SafeArrayCreate.
  • rgIndices
    [no] Ponteiro para um vetor de índices para cada dimensão da matriz.

    É a dimensão (menos significativo) right-Most rgIndices[0].

    A dimensão left-Most é armazenada no rgIndices[psa->cDims –1].

  • Vp
    [out] Void ponteiro para os dados para atribuir para a matriz.

    A variante tipos VT_DISPATCH, VT_UNKNOWN e VT_BSTR são ponteiros e não exigem outro nível de engano.

Return Value

Retorna os valores HRESULT mostrados a seguinte tabela.

Valor Descrição

S_OK

O sucesso.

DISP_E_BADINDEX

O índice especificado era inválido.

E_INVALIDARG

Um argumento é inválido.

E_OUTOFMEMORY

Não foi possível alocar memória para o elemento.

Remarks

Chama essa função SafeArrayLock e SafeArrayUnlock Antes e depois atribuição o elemento.

Se o elemento dados for um seqüência de caracteres, objeto ou variante, a função copia corretamente.

Se o elemento existente for um seqüência de caracteres, objeto ou variante, ela é desmarcada corretamente.

Passagem inválido (e, em algumas circunstâncias NULL) ponteiros para essa função faz com que uma terminação inesperada do aplicativo.

Várias proteções podem estar em uma matriz. Elementos podem ser pôr em uma matriz enquanto a matriz está bloqueado por outras operações.

Example

HRESULT PASCAL __export CPoly::EnumPoints(IEnumVARIANT FAR* FAR* ppenum)
{
  unsigned int i;
  HRESULT hresult;
  VARIANT var;
  SAFEARRAY FAR* psa;
  CEnumPoint FAR* penum;
  POINTLINK FAR* ppointlink;
  SAFEARRAYBOUND rgsabound[1];
  rgsabound[0].lLbound = 0;
  rgsabound[0].cElements = m_cPoints;
  psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
  if(psa == NULL){
    HRESULT = ResultFromScode(E_OUTOFMEMORY);
    goto LError0;
  }
  // Code omitted here for brevity.
    V_VT(&var) = VT_DISPATCH;
    HRESULT = ppointlink->ppoint->QueryInterface(
    IID_IDispatch, (void FAR* FAR*)&V_DISPATCH(&var));
    if(HRESULT != NOERROR)
      goto LError1;
    ix[0] = i;
    SafeArrayPutElement(psa, ix, &var);
    ppointlink = ppointlink->next;
  }
  HRESULT = CEnumPoint::Create(psa, &penum);
  if(HRESULT != NOERROR)
    goto LError1;
  *ppenum = penum;
  return NOERROR;
LError1:;
  SafeArrayDestroy(psa);
LError0:;
  return hresult;
}

Requirements

Header oleauto.h
Library oleaut32.lib
Windows Embedded CE Windows CE 2.0 and later
Windows Mobile Windows Mobile Version 5.0 and later

See Also

Reference

Automation Functions
SafeArrayCreate
SafeArrayLock
SafeArrayUnlock