如何使用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;

       }

}

posted @ 2012-03-27 11:07  SolidMango  阅读(325)  评论(0)    收藏  举报