我在IDL文件里定义了两个对象类型,分别是IMarks和IMark,接口IMarks里有getAllMark返回的是IMark的数组,这个接口方法是这么写的
HRESULT getAllMark([out, retval] SAFEARRAY(IMark*)* retVal);我在VB 6.0里可以获得对象数组,但在VC 里如何获得,怎么试也不行。IMarksPtr sPtr;
IMarkPtr Ptr;SAFEARRAY* = sPtr->getAllMark();
....
....请问我要让 Ptr 获得第0个数组下面的代码如何写了

解决方案 »

  1.   

    C++中用VARIANT等来接收,然后自己再处理数组VARIANT* = sPtr->getAllMark(); 
      

  2.   

    IMarksPtr sPtr; 
    SAFEARRAY* = sPtr->getAllMark(); 
    sPtr = (IMarksPtr)->pvData)[0]; 
      

  3.   

    能这样调用吗?
    SAFEARRAY* = sPtr->getAllMark(); VC里面应该是这样吧?
    SAFEARRAY* ;
    sPtr->getAllMark(&); SAFEARRAY 的用法不难, SafeArrayGetLBound, SafeArrayGetElement
    参考 MSDN例子:short WINAPI SumArray(
        LPSAFEARRAY *ppsa, long *plResult)
    {
        short iElem;
        long lLb, lUb, l, lResult;    if (*ppsa == NULL) // array has not been initialized
            return -4;    if ((*ppsa)->cDims != 1)    // check number of dimensions
            return -5;    // get the upper and lower bounds of the array    if (FAILED(SafeArrayGetLBound(*ppsa, 1, &lLb)) ||
                FAILED(SafeArrayGetUBound(*ppsa, 1, &lUb)))
            return -1;
        
        // loop through the array and add the elements    for (l = lLb, lResult = 0; l <= lUb; l++) 
        {
            if (FAILED(SafeArrayGetElement(*ppsa, &l, &iElem)))
                return -2;
            lResult += iElem;
        }    *plResult = lResult;
        return 0;
    }