Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1257904
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2008-11-27 21:16:49



 
  各位,用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这种编译型的语言,运行期类型信息很不完整,不会包含函数参数列表的,所以,在后期绑定的时候无法实现重载。

阅读(276) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~