CreateObject方法是否遵循任何特定语法?

时间:2015-08-10 15:58:09

标签: vba

例如,起初我认为括号中的内容是由句点分隔的库和类(例如:"Scripting.Dictionary""Scripting.FileSystemObject"。但是,当您将它用于Internet Explorer时是"InternetExplorer.Application"而不是"SHDocVw.InternetExplorer"。语法是不是标准的,你只需要每次查找一下吗?我会使用早期绑定,但我只是好奇。

2 个答案:

答案 0 :(得分:2)

用作CreateObject()参数的字符串被称为程序化标识符"ProgId"。 COM类使用CLSID标识自己,或者基本上是GUID。但是,无论何时需要实例化COM对象(顺便说一句是CLSID)而不必记住并键入FileSystemObject COM类的{0D43FE01-F093-11CF-8940-00A0C9054228},COM允许指定一个ProgId字符串。

您可以检查HKEY_CLASSES_ROOT\CLSID注册表项的内容,以查看PC上可用的所有COM类。这是CLSID课程的FileSystemObject,显示ProgID

enter image description here

OleView或NirSoft ActiveXHelper等工具使查找ProgId变得更加容易。其他语言要求您跳过箍来创建COM对象。但VB系列语言是&#34; COM意识到&#34;并提供必要的实用程序,以轻松创建和使用COM组件,而不必担心IIDsCLSIDsType Libraries和其他&#34; COM&#34; mumbo jumbo。在VB中,当您添加"Reference"时,您引用了Type Library。当您致电CreateObject(<string>)时,您告诉Windows使用CLSID ProgId查找COM类的<string>。它们只是更简单,更清洁的方式来与COM世界交互。

要(尝试)回答您的问题,ProgId可以是COM对象的创建者所选择的任何内容。它通常是"<COM Library>.<COM Class>",但情况并非总是如此。通常包含版本号。例如,"MSMXL2.DOMDocument.6.0"包括库和类的版本号。其他时候,根本没有图书馆(例如CreateObject("htmlfile"))。所以,遗憾的是,这里没有完美的标准。

答案 1 :(得分:0)

这取决于您访问图书馆的方式 注意:这将在Visual Basic或VBScript

中工作
fso = CreateObject("Scripting.FileSystemObject")

Scripting是类型库的名称,FileSystemObject是您要为其创建实例的对象的名称。

如果您引用了库,则无需通过脚本库 注意:这只适用于Visual Basic。

Dim fso As New FileSystemObject