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

How getObject Function internally works?

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

Set oApp = GetObject(,"Inventor.Application") Set oDoc = oApp.ActiveDocument

我在这里使用 GetObject() 函数来获取 运行 Inventor 应用程序的引用。 但我对 GetObject() 函数有疑问

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

2) 它如何访问特定应用程序的 header class 因此我们将访问该应用程序的 class?

的所有方法和属性

有人能解释一下吗?

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

GetObjectCreateObject 在某种程度上相似,但它们的用途不同。
如果需要创建对象的新实例,请使用 CreateObject。
如果需要引用对象的现有实例,请使用 GetObject。

GetObject 函数有两个可选参数:object's pathname(即完整路径和文件名)和 object's ProgID。尽管两个参数都是可选的,但您必须至少指定一个。如果省略这两个参数,则会产生错误。例如:

Dim wordDoc
Set wordDoc = GetObject ("FilePath\FileName.doc")

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

如果您指定 ProgID 而不是路径名,则结果会根据您设置参数的方式而有所不同。如果您将空字符串作为代码中的第一个参数传递,例如

Set wordApp = GetObject("", "Word.Application")

VBScript returns Word 应用程序对象的新实例(即表示 Word 应用程序的对象)。此 GetObject 调用等同于 CreateObject 调用

Set wordApp = CreateObject ("Word.Application")

如果省略路径名参数但保留逗号

Set wordApp = GetObject (, "Word.Application")

VBScript returns Application 对象的现有实例(如果存在)。

有关详细信息,请查看 this and this 链接。

您关闭错误检查,尝试 GetObject,然后测试 err.number <> 0。如果 inventor 是 运行 调用将成功并且 err.number 将是 0,否则它将是 424 错误(我认为)。

针对 GetObject 的每个变体进行的 API 调用在 https://msdn.microsoft.com/en-us/library/windows/desktop/ms221192(v=vs.85).aspx 中有详细说明。

从上面link.

GetObject (文件名, ProgID)

CLSIDFromProgID 

CoCreateInstance 

QueryInterface for IPersistFile interface.

Load on IPersistFile interface.

QueryInterface to get IDispatch interface. 

GetObject(文件名)

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.

GetObject (ProgID)

CLSIDFromProgID 

GetActiveObject on class ID.

QueryInterface to get IDispatch interface. 

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

https://msdn.microsoft.com/en-us/library/windows/desktop/ms680586(v=vs.85).aspx

EG

CLSIDFromProgID function

Looks up a CLSID in the registry, given a ProgID.

Syntax

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