2015-08-31 3 views
3

Я Inventor 2013 Автоматизация с использованием UFT следующим образом: -Как функция getObject работает внутри?

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

Здесь я использую GetObject() функцию, чтобы получить ссылку на работы Inventor приложения. , но у меня есть вопросы о GetObject() функция

1) Как узнать, что приложение присутствует или находится в рабочем состоянии?

2) Как получить доступ к классу заголовков конкретного приложения, чтобы мы получили доступ ко всем методам и свойствам этого класса приложения?

может кто-нибудь объяснить это?

+0

App Inventor является чем-то еще, как Autodesk Inventor 2013. Я обновил этот тег для вас ... – Taifun

ответ

4

GetObject и CreateObject являются частью автоматизации COM, предоставляемой VBScript. VBScript не может использовать все COM-объекты, доступные через Windows. VBScript может использовать только те объекты, которые выставляют строку, называемую программным идентификатором (ProgID). Хотя не все COM-объекты имеют ProgID, все COM-объекты имеют 128-битное число, называемое идентификатором класса, или CLSID. Если COM-объект имеет ProgID, вы можете использовать VBScript для создания объекта, вызова его методов и свойств и уничтожения объекта.

GetObject и CreateObject работает аналогично в пути, но они служат разным целям.
Если вам нужно создать новый экземпляр объекта, используйте CreateObject.
Если вам нужно ссылаться на существующий экземпляр объекта, используйте GetObject.

GetObject функция имеет два дополнительных аргумента: object's pathname (то есть, полный путь и имя файла) и object's ProgID. Хотя оба аргумента являются необязательными, вы должны указать хотя бы один. Если вы опустите оба аргумента, появится ошибка. Например:

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

Когда этот код выполняются, приложение, связанное с указанным путевым именем запускается и объект в указанном файле активизирован. Если pathname является строкой нулевой длины (""), GetObject возвращает экземпляр нового объекта указанного типа. Если аргумент pathname опущен, GetObject возвращает текущий активный объект указанного типа. Если объект указанного типа не существует, возникает ошибка.

Если вы укажете ProgID, но не путь, результаты будут отличаться в зависимости от того, как вы настроили аргументы. Если передать пустую строку в качестве первого аргумента в коде, такие как

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

VBScript возвращает новый экземпляр объекта Application Уорда (то есть объект, который представляет приложение Word).Это GetObject вызов эквивалентен вызову CreateObject

Set wordApp = CreateObject ("Word.Application") 

Если опустить имя пути аргумент, но оставить запятая

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

VBScript возвращает существующий экземпляр объекта Application, если таковой существует.

Для получения дополнительной информации обратитесь this и this ссылки.

0

Выключите проверку ошибок, попробуйте GetObject, а затем проверьте err.number <> 0. Если изобретатель работает, вызов будет успешным, и err.number будет 0, иначе это будет 424 ошибка (я думаю).

Запросы API, сделанные для каждого варианта GetObject, указаны в https://msdn.microsoft.com/en-us/library/windows/desktop/ms221192(v=vs.85).aspx.

Сверху ссылку.

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 функция

Смотрит вверх CLSID в реестре, учитывая ProgID.

Синтаксис

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