CComVariant             vBodyArr;
    long                    i = -1;
    SAFEARRAY*              psaBody = V_ARRAY(&vBodyArr);
    LPDISPATCH*             pBodyDispArray = NULL; 
    long                    nBodyHighIndex = -1;
    long                    nBodyCount = -1;
    
    hr = SafeArrayAccessData(psaBody, (void **) &pBodyDispArray); 
    ASSERT(NULL != pBodyDispArray);
    hr = SafeArrayGetUBound(psaBody, 1, &nBodyHighIndex);     nBodyCount = nBodyHighIndex + 1;
    for (i = 0; i < nBodyCount; i++) 
    {
      CComQIPtr <IBody2>          pBody;
      pBody = pBodyDispArray[i];
      ASSERT(pBody);
      hr = pBody->Select(VARIANT_TRUE, 0, &bRet);
      ASSERT(bRet);
      pBody.Release();
    }
        
    // Unaccess & destroy the component SafeArray
    hr = SafeArrayUnaccessData(psaBody);
    hr = SafeArrayDestroy(psaBody);

解决方案 »

  1.   

    IBody2不清楚是什么接口,这个知道就好办了
    pBodyDispArray是IBody2数组指针
    其他貌似很容易翻译
      

  2.   

    CComQIPtr <IBody2>          pBody;
    这种变量定义在Delphi里面怎样表示呢?
    LPDISPATCH*             pBodyDispArray = NULL; 这句定义pBodyDispArray 是一个指针, 但在pBody = pBodyDispArray[i];这句就自动变成数组了, 这种在Delphi里面又怎样表示啊? C++真是太灵活了.
      

  3.   

    pBodyDispArray:^IBody2 // LPDISPATCH指针原形个人推断是^IBody2
    pBody:IBody2 //以次类推pBody := pBodyDispArray;
    下一条数据就是Inc(pBodyDispArray)
    //////////////////////////////////
    偏方不敢保证成功
    var
    pBodyDispArray:array of IBody2;
    pBody:IBody2; 
    begin
    //不一定能被初始化
    SafeArrayAccessData(psaBody, Pointer(pBodyDispArray)); 
    ....
    ....
    //如果能成功就是数组了
    pBody := pBodyDispArray[i];
    ....
    ...
    end;
      

  4.   

    CComQIPtr <IBody2>          pBody;
    应该是模板,delphi很难对应吧