0
fyntom
22.06.07
✎
16:27
|
как преобразовать VARIANT в double*?
делаю так, передает че попало, а не массив:
/**************************
VARIANT lfun = GetNParam(*paParams,3);
result=calc(n.intVal, m.intVal,&cfun.dblVal,&lfun.dblVal,zk.dblVal);
double* CAddIn::calc(int n1,int m1,double *cfun,double *lfun,double zk)
/**-***********************
lfun передается из 1с 8.0
int и double нормально, а с массивами косяк
|
|
3
DmitrO
22.06.07
✎
18:57
|
ну дык в приведенном коде собственно не массив и читается из lfun..
чтобы из 1с получить данные в виде массива double, надо из 1С передавать объект COMSafeArray типа VT_R8
потом так:
if (V_VT(&lfun) == (VT_R8|VT_ARRAY))
{
SAFEARRAY* psa = V_ARRAY(&lfun);
double HUGEP *pData;
SafeArrayAccessData(psa, (void HUGEP**)&pData); //проверить HRESULT
//тут имеем наш массив double-ов, вызываем calc
SafeArrayUnaccessData(psa); //проверить HRESULT
}
else
{
//не то нам передали из 1С..
}
|
|