delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks
Delphi写的ActiveX控件如何返回数组到Vbscript/javascript Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061120161640191.html
 
  各位,用VBScript调用ActiveX很容易送入一个Variant参数,内容是一个数组,但是反过来,就一直没有成功,哪位知道如何实现delphi   ActiveX控件送出数组内容给Vbscript么?多谢!  
   
  Javascript也可以……  
   
  也就是,如何实现在脚本和ActiveX之间的复杂数据交互  
   
  多谢  
 

Delphi的函数返回值好像不支持数组。

我也为这个问题困惑了很久,实际上,javascript中的数组并非safeArray,不是delphi数组转换成varArray的兼容类型,它是一个支持双接口的Com对象,我找了很久,没找到这个对象的类型库,我觉得可以写一个支持双接口的类,包含javascript数组的公共方法就可以了。但是,又有问题,我不知道在javascript中如何转换索引器(比如fg[2])的,这个找了很久也找不到说明。  
   
  郁闷的不行,最后,只好在调用函数中多包含一个参数,这个参数类型就是IDispatch接口,然后在javascript中传入new   Array()。再用IDispatch的invoke调用这个数组对象的方法来添加值。  
   
  我都快疯了。  
   
  我实在要疯了,真不知道javascript对象的类型库在哪里。找遍MSDN找不到。

再后来,我也不需要使用者传递数组。  
   
  我可以从ActiveX获取Browsor,进而获取Document,然后让Document执行一个脚本,他有一个方法InvokeScript,我就调用这个方法,用eval执行了new   Array()。得到返回的JS数组对象。  
   
  后来,只要是JS需要的对象,除了基本的值类型以外,我都用这个办法来创造兼容的JS对象。  
   
  我还给我的ActiveX对象添加了attachEvent和detachEvent方法,这样,javascript可以用习惯办法来响应ActiveX事件,而不是用event类型的script代码段来做。我在内部用了一个列表,支持多播。  
   
  后来我的ActiveX对象搞得和标准的内置的JS对象差不多了,呵呵,当然都没用标准的办法,实际上是得益于IDispatch的灵活。他的后期绑定和按照名称绑定的策略的确不错。  
   
  实际上IDispatch并没拒绝重载,只是delphi这种编译型的语言,运行期类型信息很不完整,不会包含函数参数列表的,所以,在后期绑定的时候无法实现重载。


文章来源:http://www.delphi2007.net/DelphiAPI/html/delphi_20061120161640191.html
posted on 2008-11-27 21:11 delphi2007 阅读(502) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。