快捷搜索:

VBS技术内幕:CreateObject函数详解

VBS技术内幕:CreateObject函数详解

  曾经我也不明白为什么在CreateObject函数中传递不同的字符串就可以创建各种各样功能强大的对象。后来无意中看到UMU的《[UMU WSH 教程](9)CreateObject 过程》,才知道CreateObject函数创建的是COM对象,第一个参数是COM对象的ProgID。再后来拜读了Jeff Glatt的《COM in plain C》,知道了如何用纯C语言编写COM组件。

  COM(组件对象模型)是一个很复杂的概念,需要用砖头那么厚的书才能讲得清楚,而且没有C++和面向对象编程背景的话很难理解,比较经典的书有《COM原理与应用》、《COM技术内幕》和《COM本质论》,不过貌似都绝版了。

  当然,作为VBSer,我们不需要去理解COM的原理或者本质。简单的说,COM就是别人写好的模块,我们要做的仅仅是调用它,而不必关心它的内部实现,这也是COM技术的一个初衷。ProgID可以认为是开发人员为COM对象起的一个名字,我们把COM对象的名字传递给CreateObject函数,告诉它我们想创建这个对象,CreateObject函数就会返回这个对象的指针给你。

  例如我可以(当然,你也可以)用VB来编写一个COM组件,然后给它起个名字那么注册该COM组件之后,就可以用CreateObject函数来创建了:

  那么CreateObject函数是如何创建对象的呢?用OllyDbg跟了一下,核心的代码大概可以分成四步:

  第二步调用CoGetClassObject函数获取IClassFactory接口的指针asp教程,如果获取不到,报错“ActiveX 部件不能创建对象”或者“类不支持 Automation 操作”,也可能是其他错误信息,这取决于COM的实现。

  说了半天还是没有说到一个关键的问题:VBS到底能调用哪些对象?或者说,哪些字符串可以作为CreateObject函数的第一个参数?欲知问题答案,请听下回分解。

  VB 开发环境就是这样知道对象里有什么函数的。所以,如果我们知道一个对象名,却不知道这个对象里有什么函数,可以用上面说的方法获得。

  xuejinglan 于 2007年03月31日 星期六 11:40 问 UMU 这样一个问题:“系统中存在哪些对象,对象有那些函数可以调用,如何知道?”这个问题已经回答后一半了,下面回答前一半。

  查找“自动化对象”可以使用 VS 带的工具 oleview.exe,它专门用来查看 OLE/COM 对象的注册信息,界面如下图:

  接下去的创建过程不属于脚本应该考虑的范围,有兴趣学 COM 的话可以研究研究,很好的一个机制,值得学习。标题: VBS技术内幕:CreateObject函数asp教程

您可能还会对下面的文章感兴趣: