BCB在COM中如何处理javascript脚本传递的数组
网上都是VC版本的,再就是VBSCRIPT脚本的比较多,我一直用JAVASCRIPT,所以一直想写一个
最近刚刚解决了这个问题,看见BCB的帖子上了头版,我也来分享一下,高手们多提点意见。
//枚举类型转换成数组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;}//=============================================================