Vbscript getObject函数在内部是如何工作的?

Vbscript getObject函数在内部是如何工作的?,vbscript,qtp,autodesk,Vbscript,Qtp,Autodesk,我正在使用UFT自动化Inventor 2013,如下所示:- Set-oApp=GetObject(,“Inventor.Application”) 设置oDoc=oApp.ActiveDocument 这里我使用GetObject()函数获取运行Inventor应用程序的参考。 但是我有一个关于GetObject()函数的问题 1) 它如何发现任何应用程序存在或处于运行状态 2) 它如何访问特定应用程序的头类,以便我们访问该应用程序类的所有方法和属性 有人能解释一下吗?获取对象和创建对象是V

我正在使用UFT自动化Inventor 2013,如下所示:-

Set-oApp=GetObject(,“Inventor.Application”)
设置oDoc=oApp.ActiveDocument

这里我使用
GetObject()
函数获取运行Inventor应用程序的参考。 但是我有一个关于
GetObject()
函数的问题

1) 它如何发现任何应用程序存在或处于运行状态

2) 它如何访问特定应用程序的头类,以便我们访问该应用程序类的所有方法和属性


有人能解释一下吗?

获取对象和
创建对象是VBScript提供的COM自动化的一部分。VBScript无法使用通过Windows提供的所有COM对象。VBScript只能使用那些公开称为编程标识符的字符串的对象(
ProgID
)。尽管并非所有COM对象都有ProgID,但所有COM对象都有一个128位的编号,称为类标识符或CLSID。如果COM对象具有ProgID,则可以使用VBScript实例化该对象,调用其方法和属性,并销毁该对象


GetObject
CreateObject
的工作方式类似,但用途不同。
如果需要创建对象的新实例,请使用CreateObject。
如果需要引用对象的现有实例,请使用GetObject


GetObject
函数有两个可选参数:对象的路径名(即完整路径和文件名)和对象的ProgID
。尽管这两个参数都是可选的,但必须至少指定一个。如果省略这两个参数,将导致错误。例如:

Dim wordDoc
Set wordDoc = GetObject ("FilePath\FileName.doc")
执行此代码时,将启动与指定路径名关联的应用程序,并激活指定文件中的对象。如果路径名是长度为零的字符串(“”),则GetObject返回指定类型的新对象实例。如果省略pathname参数,GetObject将返回指定类型的当前活动对象。如果不存在指定类型的对象,则会发生错误

如果指定ProgID而不是路径名,则结果会因设置参数的方式而异。如果在代码中传递空字符串作为第一个参数,例如

Set wordApp = GetObject("", "Word.Application")
VBScript返回Word应用程序对象的新实例(即,表示Word应用程序的对象)。此GetObject调用相当于CreateObject调用

Set wordApp = CreateObject ("Word.Application")
如果省略pathname参数,但保留逗号

Set wordApp = GetObject (, "Word.Application")
VBScript返回应用程序对象的现有实例(如果存在)


有关详细信息,请检查链接。

关闭错误检查,尝试
GetObject
,然后测试
err.number 0
。如果inventor正在运行,则调用将成功,
err.number
将为
0
,否则将为
424
error(我认为)

GetObject
的每个变体进行的API调用在中有详细说明

从上面的链接

GetObject(文件名,ProgID)

GetObject(文件名)

GetObject(ProgID)

您可以在此处查找每个单独的函数调用

乙二醇

CLSIDFromProgID函数

给定ProgID,在注册表中查找CLSID

语法

HRESULT CLSIDFromProgID(
  _In_  LPCOLESTR lpszProgID,
  _Out_ LPCLSID   lpclsid
);

App Inventor与Autodesk Inventor 2013不同。我为你更新了标签…非常感谢你的回答,很多有用的信息肯定会帮助我。只是提醒一下,错误代码是429 ActiveX组件无法创建对象。
CreateBindCtx creates the bind context for the subsequent functions.

MkParseDisplayName returns a moniker handle for BindMoniker.

BindMoniker returns a pointer to the IDispatch interface.

Release on moniker handle.

Release on context.
CLSIDFromProgID 

GetActiveObject on class ID.

QueryInterface to get IDispatch interface. 
HRESULT CLSIDFromProgID(
  _In_  LPCOLESTR lpszProgID,
  _Out_ LPCLSID   lpclsid
);