zoukankan      html  css  js  c++  java
  • COM互操作 在VB 脚本里面使用.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的函数为默认的调用函数。

  • 相关阅读:
    P3_C17:设计对象的原则
    【c++编程习惯】关于我自己
    淘宝退货业务 活动图
    UML绘图要点
    P2_C4-7:初始阶段
    P3_C8-11:细化阶段-基础迭代
    P3_C14-16:面向对象设计
    P3_C12-13:逻辑架构和包图
    P1_C1-3:系统分析与设计概要
    Chapter11 线程
  • 原文地址:https://www.cnblogs.com/killmyday/p/1394468.html
Copyright © 2011-2022 走看看