com组件的方法在idl中的声明:[id(1), helpstring("方法inputarray")] hresult inputarray([in] variant vdata);
???for i = 0 to 10????a(i) = asc("0")???next 【程序编程相关:SUN公司总裁兼COO推出个人blog】
在脚本中建立数组并调用com组件的方法:当数组很大的时候,like 100k ,javascript在给数组赋值的时候效率非常低!完成时间,cpu占用率,占用的内存都大的可怕.反而vbscript却完成的很好. ?sub inputarray_vbscript???on error resume next??set bigparamctla = createobject("bigparam.bigparamctl")??if err0 then???alert("bigparam not properly installed on this pc!")??else???dim i???dim a(10) 【推荐阅读:介绍Java中的assert用法】
????function inputarray_javascript()?{??var a = new array(10);??for(var i = 0; i ??{???a[i] = 49 ;??}??alert("javascript complete");??bigparamctl.inputarray(a); ?} 【扩展信息:FreeImage的图片处理效果预览图】
???msgbox("vbscript complete")???????bigparamctla.inputarray a ???????? end if?end sub
com组件的代码:从代码中可以看到vbscript传进来的是个safearray.而javascript的情况就复杂了,javascript中得数组并不是真正意义上的数组,这个“数组”传到com中被放进一个集合里,参数variant的类型被置为vt_dispatch,我们得通过这个idispatch指针调用invoke才能得到用来读取集合的枚举接口.stdmethodimp cbigparamctl::inputarray(variant vdata){ lpbyte p ; dword nlen;
hresult hr;
... 下一页