SafeArrayPutElement
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