我在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个数组下面的代码如何写了
HRESULT getAllMark([out, retval] SAFEARRAY(IMark*)* retVal);我在VB 6.0里可以获得对象数组,但在VC 里如何获得,怎么试也不行。IMarksPtr sPtr;
IMarkPtr Ptr;SAFEARRAY* = sPtr->getAllMark();
....
....请问我要让 Ptr 获得第0个数组下面的代码如何写了
SAFEARRAY* = sPtr->getAllMark();
sPtr = (IMarksPtr)->pvData)[0];
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;
}