加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

COM互操作 - 在VB 脚本里面使用.NET类型

发布时间:2020-12-16 23:35:07 所属栏目:大数据 来源:网络整理
导读:请看下面这段 VBS 代码: Set obj = CreateObject( "System.Collections.ArrayList" ) obj.Add( "this is a test" ) obj.Add(1) obj.Add(obj) Msgbox obj(0) Msgbox obj(1) Msgbox obj(2).ToString() 代码里面试图创建一个 ArrayList 的 .NET 对象,然后添加

请看下面这段VBS代码:

Set obj = CreateObject("System.Collections.ArrayList")

obj.Add("this is a test")

obj.Add(1)

obj.Add(obj)

Msgbox obj(0)

Msgbox obj(1)

Msgbox obj(2).ToString()

代码里面试图创建一个ArrayList.NET对象,然后添加了几个不同类型的对象在这个ArrayList里面,最后显示结果。为什么我们可以在VBS里面使用.NET里面的内建类型呢?这是因为.NET安装好了以后,在注册表里面将所有COM可见的类型都注册过了,打开注册表编辑器,你会看到SYSTEM_CLASS_ROOT下面有很多以System.开头的progid,这些progidCLSIDInprocServer都是mscoree.dll,也就是说在VB script脚本里面的CreateObject对象调用时,COM库通过mscoree.dll加载CLR,然后创建System.Collections.ArrayList对象并最终返回给VB Script程序。

Msgbox obj(1)也有玄机,要知道,在ArrayList里面只能保存Object类型的数据,也就是说但是obj.Add(1)调用完毕以后,ArrayList第二个元素是一个object类型,那么为什么Msgbox obj(1)却能够正确显示1呢?Object类型里面有好几个函数,例如EqualsGetHashCode,为什么其他的函数不调用,而偏偏调用ToString函数呢?这是因为.NETToString函数的DISPID设置为零了,在COM里面,DISPID0的函数为默认的调用函数。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读