• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Delphi写的ActiveX控件如何返回数组到Vbscript/javascript

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
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这种编译型的语言,运行期类型信息很不完整,不会包含函数参数列表的,所以,在后期绑定的时候无法实现重载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap