从昨天开始搞一个画图的ocx控件,在网页中调用它,通过javascript给它赋值;调用一个控件中一个画图方法AddNewStream()的时候,怎么试都说是有 “类型不匹配”的错误;控件是用C++写的,
这是方法:
[code]
void AddNewStream(short stream_seqid, short stream_showflag, unsigned long stream_color, LPCTSTR stream_name, LPCTSTR stream_unit, double stream_scale, LPCTSTR stream_remark, short m_nPenStyle, short m_nPenWidth, short m_nNumValidDataRT, VARIANT * m_dValueRT)
{
static BYTE parms[] = VTS_I2 VTS_I2 VTS_UI4 VTS_BSTR VTS_BSTR VTS_R8 VTS_BSTR VTS_I2 VTS_I2 VTS_I2 VTS_PVARIANT ;
InvokeHelper(0x3, DISPATCH_METHOD, VT_EMPTY, NULL, parms, stream_seqid, stream_showflag, stream_color, stream_name, stream_unit, stream_scale, stream_remark, m_nPenStyle, m_nPenWidth, m_nNumValidDataRT, m_dValueRT);
}
[/code]
这是人家给的一个调用AddNewStream方法的例子:
[code]
static int bbb=0;
bbb++;
VARIANT var;
VariantInit(&var);
SAFEARRAYBOUND rgsabound[2];
m_vvvv.ClearAllStream();
m_vvvv.SetHorizontalTimeUnit(5,"秒"); //设置横坐标单位及其描述,0显示到年、1显示到月、依次类推
m_vvvv.SetHorizontalX2Time(1); //是否将横坐标转换成时间:1代表转换、0代表不转换
m_vvvv.Set_ChartType(0);//显示棒图或曲线图:1代表曲线图;0代表棒图
int nLength = 10;
rgsabound[0].lLbound=0;
rgsabound[1].lLbound=0;
rgsabound[0].cElements=nLength;
rgsabound[1].cElements=2;
var.vt=VT_R8|VT_ARRAY;
var.parray=SafeArrayCreate(VT_R8,2,rgsabound);
long index[2];
double data;
index[0]=0;
index[1]=0;
data=132.184906; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=0;
index[1]=1;
data=12*60*60+10; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=1;
index[1]=0;
data=132.337234; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=1;
index[1]=1;
data=12*60*60+30; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=2;
index[1]=0;
data=132.003876; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=2;
index[1]=1;
data=12*60*60+40; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=3;
index[1]=0;
data=132.221054; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=3;
index[1]=1;
data=14*60*60+10; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=4;
index[1]=0;
data=132.383438; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=4;
index[1]=1;
data=14*60*60+30; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=5;
index[1]=0;
data=131.439148; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=5;
index[1]=1;
data=15*60*60+20; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=6;
index[1]=0;
data=131.950562; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=6;
index[1]=1;
data=15*60*60+30; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=7;
index[1]=0;
data=132.065659; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=7;
index[1]=1;
data=15*60*60+50; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=8;
index[1]=0;
data=132.047348; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=8;
index[1]=1;
data=17*60*60+20; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=9;
index[1]=0;
data=132.123352; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=9;
index[1]=1;
data=18*60*60+30; //时间
SafeArrayPutElement(var.parray, index, &data);
m_vvvv.AddNewStream(bbb,true,RGB(100+bbb*20,200-bbb*30,30*bbb*50),"GaoXingAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXXXXXXXXXXXXXXXX","GaoXing",bbb,"GaoXing",1,1,10,&var); //添加曲线数据
::SafeArrayDestroyData(var.parray);
::VariantClear(&var);
[/code]
[b][color=red]我自己不懂C++,我现在遇到的问题是该方法的最后一个参数是VARIANT类型的,我怎么用javascript给这个ocx控件中的该方法赋值?[/[/color]b]
请各位不吝赐教!
这是方法:
[code]
void AddNewStream(short stream_seqid, short stream_showflag, unsigned long stream_color, LPCTSTR stream_name, LPCTSTR stream_unit, double stream_scale, LPCTSTR stream_remark, short m_nPenStyle, short m_nPenWidth, short m_nNumValidDataRT, VARIANT * m_dValueRT)
{
static BYTE parms[] = VTS_I2 VTS_I2 VTS_UI4 VTS_BSTR VTS_BSTR VTS_R8 VTS_BSTR VTS_I2 VTS_I2 VTS_I2 VTS_PVARIANT ;
InvokeHelper(0x3, DISPATCH_METHOD, VT_EMPTY, NULL, parms, stream_seqid, stream_showflag, stream_color, stream_name, stream_unit, stream_scale, stream_remark, m_nPenStyle, m_nPenWidth, m_nNumValidDataRT, m_dValueRT);
}
[/code]
这是人家给的一个调用AddNewStream方法的例子:
[code]
static int bbb=0;
bbb++;
VARIANT var;
VariantInit(&var);
SAFEARRAYBOUND rgsabound[2];
m_vvvv.ClearAllStream();
m_vvvv.SetHorizontalTimeUnit(5,"秒"); //设置横坐标单位及其描述,0显示到年、1显示到月、依次类推
m_vvvv.SetHorizontalX2Time(1); //是否将横坐标转换成时间:1代表转换、0代表不转换
m_vvvv.Set_ChartType(0);//显示棒图或曲线图:1代表曲线图;0代表棒图
int nLength = 10;
rgsabound[0].lLbound=0;
rgsabound[1].lLbound=0;
rgsabound[0].cElements=nLength;
rgsabound[1].cElements=2;
var.vt=VT_R8|VT_ARRAY;
var.parray=SafeArrayCreate(VT_R8,2,rgsabound);
long index[2];
double data;
index[0]=0;
index[1]=0;
data=132.184906; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=0;
index[1]=1;
data=12*60*60+10; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=1;
index[1]=0;
data=132.337234; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=1;
index[1]=1;
data=12*60*60+30; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=2;
index[1]=0;
data=132.003876; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=2;
index[1]=1;
data=12*60*60+40; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=3;
index[1]=0;
data=132.221054; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=3;
index[1]=1;
data=14*60*60+10; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=4;
index[1]=0;
data=132.383438; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=4;
index[1]=1;
data=14*60*60+30; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=5;
index[1]=0;
data=131.439148; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=5;
index[1]=1;
data=15*60*60+20; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=6;
index[1]=0;
data=131.950562; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=6;
index[1]=1;
data=15*60*60+30; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=7;
index[1]=0;
data=132.065659; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=7;
index[1]=1;
data=15*60*60+50; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=8;
index[1]=0;
data=132.047348; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=8;
index[1]=1;
data=17*60*60+20; //时间
SafeArrayPutElement(var.parray, index, &data);
index[0]=9;
index[1]=0;
data=132.123352; //实际值
SafeArrayPutElement(var.parray, index, &data);
index[0]=9;
index[1]=1;
data=18*60*60+30; //时间
SafeArrayPutElement(var.parray, index, &data);
m_vvvv.AddNewStream(bbb,true,RGB(100+bbb*20,200-bbb*30,30*bbb*50),"GaoXingAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXXXXXXXXXXXXXXXX","GaoXing",bbb,"GaoXing",1,1,10,&var); //添加曲线数据
::SafeArrayDestroyData(var.parray);
::VariantClear(&var);
[/code]
[b][color=red]我自己不懂C++,我现在遇到的问题是该方法的最后一个参数是VARIANT类型的,我怎么用javascript给这个ocx控件中的该方法赋值?[/[/color]b]
请各位不吝赐教!