13,825
社区成员
发帖
与我相关
我的任务
分享
//枚举类型转换成数组
HRESULT VariantEnumToDoubles(IDispatch* disp,double *&dArray,int &length)
{
CComVariant resultV;
HRESULT hr;
DISPPARAMS noArgs = {NULL,NULL,0,0};
hr = disp->Invoke(DISPID_NEWENUM,IID_NULL,
LOCALE_SYSTEM_DEFAULT,DISPATCH_PROPERTYGET,
&noArgs,&resultV,NULL,NULL);
if(resultV.vt != VT_UNKNOWN && resultV.vt != VT_DISPATCH)
return DISP_E_BADPARAMCOUNT;
CComQIPtr <IEnumVARIANT> pEnum(resultV.punkVal);
length = 0;
hr =S_OK;
while(hr == S_OK)
{
hr = pEnum->Skip(1);
if(hr == S_OK)
length++;
}
dArray = new double[length];
int nCount = 0;
CComVariant elemV;
pEnum->Reset();
hr = S_OK;
while(hr == S_OK)
{
hr = pEnum->Next(1,&elemV,NULL);
if(elemV.vt !=VT_R8 && elemV.vt !=VT_I4)
{
hr =S_FALSE;
}
else if(elemV.vt == VT_I4)
{
int itmp = elemV.intVal;
dArray[nCount] = itmp;
}
else if(elemV.vt == VT_R8)
{
double dtmp = elemV.dblVal;
dArray[nCount] = dtmp;
}
if(hr == S_OK)
nCount++;
}
return S_OK;
}
//=============================================================