vc++访问javascript(2)--IDispatchEx是动态脚本语言的基础

IDispatchEx接口是为支持动态脚本语言如JavaScript而设计的,扩展了IDispatch的功能,允许在运行时添加、删除成员以及实现大小写敏感的方法。通过这个接口,VC++能够访问并模拟JavaScript的动态特性,例如添加expando、删除成员、枚举DISPID等。这对于在VC++中与JavaScript交互至关重要。
摘要由CSDN通过智能技术生成
 

IDispatch接口主要应用于传统的自动化编程,如著名的Microsoft Visual Basic。客户端程序只需得到COM组件的IDispatch接口就可调用组件所有的属性和方法。但IDispatch的局限在与它假定COM组件是静态的。也就是说,在运行期间,这些COM组件的属性和方法是不能改变的。因此,如果要实现javascript和vbscript脚本语言的动态特性,就需要一个更灵活的接口。

于是为脚本语言量身定制的IDispatchEx接口诞生了。IDispatchEx派生自IDispatch,除了支持IDispatch所约定的方法之外,还提供了一组扩展方法,用于支持脚本语言的动态特性,这些动态特性包括:

  • 为object添加成员 ("expando") — 使用带fdexNameEnsure标记的方法 GetDispID.
  • 删除object的成员 — 使用方法DeleteMemberByName 或者DeleteMemberByDispID.
  • 支持大小写敏感的方法 — 使用fdexNameCaseSensitive标记或fdexNameCaseInsensitive标记..
  • 使用隐含名搜索成员 — 使用fdexNameImplicit标记
  • 枚举object所有成员的DISPID — 使用GetNextDispID.
  • 通过DispID取得成员的名称 — 使用GetMemberName.
  • 获取object成员的属性 — 使用GetMemberProperties.
  • 使用执行带this指针的方法调用 — 使用方法InvokeEx.
    • 允许支持命名空间概念的浏览器获取object的命名空间 — 使用方法GetNameSpaceParent.

 

其实在这里,IDispatchEx接口存在更重要的意义在于,使得我们有途径在VC++中访问并模拟动态脚本语言的特性。下面我们以javascript为例。

 

举例:
方法test()中的javascript代码执行以下动作:
调用Object的constructor(构造器)创建一个新的object,用变量Obj保存。
在object中创建一个新的成员Elem,并将Elem的值设为方法cat的指针。
调用Elem方法,传入this指针。因为Elem是Obj的成员,所以this指针就指向Obj。于是方法cat中的代码也就是为Obj设置了一个新的成员Bar,并赋值为10。
完整的HTML代码如下:
   <HTML>
   <BODY>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值