如何使用safearray并将运算过的safearray作为出参传回来
How to use safearray and fetch the safearray as a out parameter
如何使用safearray并将运算过的safearray作为出参传回来
HRESULT OperationOnSafeArray( SAFEARRAY** psa, double *data, int size )
{
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = 3;
*psa = SafeArrayCreate(VT_R8, 1, rgsabound);
if(psa == NULL)
{
return E_OUTOFMEMORY;
}
double HUGEP *pData;
HRESULT hr = SafeArrayAccessData(*psa, (void HUGEP* FAR*)&pData);
if (SUCCEEDED(hr))
{
// copy sample values from data[] to this safearray
for (int i = 0; i < size; i++)
{
*pData++ = data[i];
}
}
//After calling SafeArrayAccessData, you must call the SafeArrayUnaccessData //function to unlock the array.
SafeArrayUnaccessData(*psa);
return hr;
}
void NeedOperatedSafeArray()
{
SAFEARRAY* psa = NULL;
double data[3] = {1.0, 2.0, 3.0};
// Create
CreateSafeArray(&psa, data, 3);
// Operate the safearray
// ......
// Call the SafeArrayDestroy to destroy the safearray
if(psa != NULL)
{
SafeArrayDestroy(psa);
psa = NULL;
}
}

浙公网安备 33010602011771号