浏览 11240 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-24
这是方法: 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); } 这是人家给的一个调用AddNewStream方法的例子: 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); [b]我自己不懂C++,我现在遇到的问题是该方法的最后一个参数是VARIANT类型的,我怎么用javascript给这个ocx控件中的该方法赋值?[/b] 请各位不吝赐教! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-05-24
引用 Delphi 2.0引进了一个功能强大的数据类型,称为变体类型( Va r i a n t ),主要是为了支持O L E自动化
操作。实际上, D e l p h i的Va r i a n t封装了O L E使用的Va r i a n t,但D e l p h i的Va r i a n t在D e l p h i程序的其他领域 也很有用。正如不久就要学到的, Object Pascal是唯一能在运行期间和编译期间识别Variant 的语言。 Delphi 3引进了一个新的被称为O l e Variant 类型,它跟Va r i a n t基本一致,但是它只能表达与OLE 自 动化操作相兼容的数据类型。本节介绍Va r i a n t ,然后介绍O l e Va r i a n t,并对两者进行比较。 1. Va r i a n t能动态改变类型 有时候变量的类型在编译期间是不确定的,而Va r i a n t能够在运行期间动态地改变类型,这就是引 入Variant 类型目的。例如,下面的代码在编译期间和运行期间都是正确的: v a r V: Va r i a n t ; b e g i n V:='Delphi is Great!'; //Variant 此时是一个字符串 V: = 1 ; / / Variant 此时是一个整数 V: = 1 2 3 . 3 4 ; / / Variant 此时是一个浮点数 V: = Tr u e ; / / Variant 此时是一个布尔值 V:=CreateOleObject('word.Basic'); //Va r i a n t此时是一个OLE 对象 e n d ; Va r i a n t能支持所有简单的数据类型,例如整型、浮点型、字符串、布尔型、日期和时间、货币以 及O L E自动化对象等。注意Va r i a n t不能表达Object Pascal对象。Va r i a n t可以表达不均匀的数组(数组的 长度是可变的,它的数据元素能表达前面介绍过的任何一种类型,也可包括另一个Va r i a n t数组)。 MS:传个数组就可以吧。。。JS不都是数组么? |
|
返回顶楼 | |
发表时间:2007-05-24
js里面调用variant类型,没有试过,不过在其他的script语言中遇到过类似的问题。记得当初的用法是 明确 “调用类型”,比如你是传入是int,那么调用的时候做一次类型转换,或者指定类型 ,用这样的方式来传值
i=0; funcall((int)i); |
|
返回顶楼 | |
发表时间:2007-05-24
抛出异常的爱 写道 引用 Delphi 2.0引进了一个功能强大的数据类型,称为变体类型( Va r i a n t ),主要是为了支持O L E自动化
操作。实际上, D e l p h i的Va r i a n t封装了O L E使用的Va r i a n t,但D e l p h i的Va r i a n t在D e l p h i程序的其他领域 也很有用。正如不久就要学到的, Object Pascal是唯一能在运行期间和编译期间识别Variant 的语言。 Delphi 3引进了一个新的被称为O l e Variant 类型,它跟Va r i a n t基本一致,但是它只能表达与OLE 自 动化操作相兼容的数据类型。本节介绍Va r i a n t ,然后介绍O l e Va r i a n t,并对两者进行比较。 1. Va r i a n t能动态改变类型 有时候变量的类型在编译期间是不确定的,而Va r i a n t能够在运行期间动态地改变类型,这就是引 入Variant 类型目的。例如,下面的代码在编译期间和运行期间都是正确的: v a r V: Va r i a n t ; b e g i n V:='Delphi is Great!'; //Variant 此时是一个字符串 V: = 1 ; / / Variant 此时是一个整数 V: = 1 2 3 . 3 4 ; / / Variant 此时是一个浮点数 V: = Tr u e ; / / Variant 此时是一个布尔值 V:=CreateOleObject('word.Basic'); //Va r i a n t此时是一个OLE 对象 e n d ; Va r i a n t能支持所有简单的数据类型,例如整型、浮点型、字符串、布尔型、日期和时间、货币以 及O L E自动化对象等。注意Va r i a n t不能表达Object Pascal对象。Va r i a n t可以表达不均匀的数组(数组的 长度是可变的,它的数据元素能表达前面介绍过的任何一种类型,也可包括另一个Va r i a n t数组)。 MS:传个数组就可以吧。。。JS不都是数组么? 数组我试过了,参数要求的是二维数组,我传递的也是二维数组,象这样: var a = new Array(new Number(132.184906),new Number(132.337234),new Number(132.003876),new Number(132.221054),new Number(132.383438),new Number(131.439148),new Number(131.950562),new Number(132.065659),new Number(132.047348),new Number(132.123352)); var b = new Array(12*60*60+10,12*60*60+30,12*60*60+40,12*60*60+10,12*60*60+30,12*60*60+20,12*60*60+30,12*60*60+50,12*60*60+20,12*60*60+30); var point = new Array(new Array(),new Array()); for(var i = 0;i<10;i++) { point[0][i] = a[i]; point[1][i] = b[i]; } 我传递的是point,可是不行! |
|
返回顶楼 | |
发表时间:2007-05-24
jack 写道 js里面调用variant类型,没有试过,不过在其他的script语言中遇到过类似的问题。记得当初的用法是 明确 “调用类型”,比如你是传入是int,那么调用的时候做一次类型转换,或者指定类型 ,用这样的方式来传值
i=0; funcall((int)i); jack 大哥,能说得清除一点吗? 用其他脚本语言怎么操作啊?象vbscript。我需要的是一个二维数组类型的参数! |
|
返回顶楼 | |
发表时间:2007-05-24
variant类型虽然号称支持随意类型,但是真正支持的种类依然是有限制的。如果实在不行,就转换成可以支持的类型去操作。
如果是二维数组,可以考虑当作一维数组来传递,或者干脆用一维数组来构建二维数组。 |
|
返回顶楼 | |
发表时间:2007-05-24
看看这篇有没有帮助:
http://www.5inet.net/HomePage/FrontPage/069941.html 按这篇的说法你应该是没办法成功调用了,除非它的接口更改,或者是你包装一层接口。 |
|
返回顶楼 | |
发表时间:2007-05-24
哦!谢谢各位了,我在搞搞看看,是在不行就得更换ocx控件中的参数类型了!
|
|
返回顶楼 | |
发表时间:2007-05-24
多半是要改的,给不同的脚本调用,这样写太过随意了点
|
|
返回顶楼 | |