COM组件里:
STDMETHODIMP CAdoProcess::test(DWORD *pData)
{
pData[0] = 0;
pData[1] = 1;
pData[2] = 2;
pData[3] = 3;
return S_OK;
}
客户调用:
         DWORD *dData = new DWORD[4];
hr = pI->test(dData);
DWORD b0 = dData[0];
DWORD b1 = dData[1];
DWORD b2 = dData[2];
DWORD b3 = dData[3]; 
问题:为什么b1,b2,b3里值不正确?如何解决?

解决方案 »

  1.   

    STDMETHODIMP CAdoProcess::test(DWORD *&pData)
      

  2.   

    COM可能不支持引用吧,那这样改:
    STDMETHODIMP CAdoProcess::test(DWORD **pData)
    {
             *pData[0] = 0;
    *pData[1] = 1;
    *pData[2] = 2;
    *pData[3] = 3;
    return S_OK;}
    使用的时候
     DWORD *dData = new DWORD[4];
    hr = pI->test(&dData);
      

  3.   

    STDMETHOD     XXXXXX::Get_IntegerArray(VARIANT   *pVal)   
      {   
      VariantInit(pVal);   
      pVal->vt   =   VT_ARRAY   |   VT_I4;   
      SAFEARRAY   *   psa;   
      SAFEARRAYBOUND   bd   =   {10   /*   假定10个元素   */,   0   /*坐标下界*/};   
      psa   =   SafeArrayCreate(VT_I4   /*int   类型*/,1   /*一维数组*/,   &bd);   
      int   *pData;   
      SafeAccessData(psa,   (void   **)&pData);   
      //***************   
        
      //     对pData[]赋值   
      for   (int   i   =0;i<10;i++)   
      {   
            pData[i]=1;   //全为1   
      }   
        
      //***************   
      SafeUnaccessData(psa);   
      pVal->parray   =   psa;   
      return   (S_OK);   
      }   
    问题已解决