Работаем с MS ScriptControl (VB скрипт). Добавляем к нему свои объекты и методы.
Есть ли способ узнать список доступных (добавленных) к данному моменту объектов и методов?
Если из контрола нельзя запросить такой список, то, видимо, придется дублировать добавляемую информацию в программе, что неприятно, как и любое другое дублирование кода.
Пока удалось узнать, что теоретически можно запросить у него некие
Procedures
Modules
но это, видимо, не совсем то что нужно, впрочем как практически вызывать их — пока не понятно.
Видели еще какой-то HELPER, может поискать больше информации о нем?
Свои объекты и их методы добавляем вызывая
AddObject('Object1', Object1, False)
и
AddObject('OurMethods', ObjWithMethods, True)
Помогите кто чем может, пожалуйста.
Здравствуйте, AlexKB, Вы писали:
AKB>Работаем с MS ScriptControl (VB скрипт). Добавляем к нему свои объекты и методы.
AKB>Есть ли способ узнать список доступных (добавленных) к данному моменту объектов и методов?
AKB>Пока удалось узнать, что теоретически можно запросить у него некие
AKB>Procedures
AKB>Modules
AKB>но это, видимо, не совсем то что нужно, впрочем как практически вызывать их — пока не понятно.
Вот это именно то, что нужно.
Modules — это коллекция модулей, так что модули можно перебирать.
Procedures — это коллекция всех известных процедур. Можно перебирать или использовать по известному имени.
А вот с CodeObject будет посложней. Но можно воспользоваться TLBINF32.DLL (TypeLib Information), через которую можно определить все имена, известные в этом объекте. Например, так:
Dim ta As TLI.TLIApplication, ti As TLI.InterfaceInfo, tm As TLI.MemberInfo
Set ta = New TLI.TLIApplication
Set ti = ta.InterfaceInfoFromObject(ScriptControl1.CodeObject)
Debug.Print ti.Name, ti.Members.Count
For Each tm In ti.Members
' Имеет похожие методы, что и Procedure - v.Name, v.HasReturnValue, v.NumArgs
Debug.Print tm.Name, tm.Parameters.Count
Next
Здравствуйте, Vi2, Вы писали:
AKB>>Работаем с MS ScriptControl (VB скрипт). Добавляем к нему свои объекты и методы.
AKB>>Есть ли способ узнать список доступных (добавленных) к данному моменту объектов и методов?
AKB>>Пока удалось узнать, что теоретически можно запросить у него некие
AKB>>Procedures
AKB>>Modules
AKB>>но это, видимо, не совсем то что нужно, впрочем как практически вызывать их — пока не понятно.
Vi2>Вот это именно то, что нужно.
Vi2>Modules — это коллекция модулей, так что модули можно перебирать.
Vi2>Procedures — это коллекция всех известных процедур. Можно перебирать или использовать по известному имени.
Вы правы... Пока удалось лишь найти документацию на... своем же компьютере: C:\WINDOWS\system32\MSSCRIPT.HLP.
Vi2>А вот с CodeObject будет посложней. Но можно воспользоваться TLBINF32.DLL (TypeLib Information), через которую можно определить все имена, известные в этом объекте. Например, так:
Vi2>Vi2> Dim ta As TLI.TLIApplication, ti As TLI.InterfaceInfo, tm As TLI.MemberInfo
Vi2> Set ta = New TLI.TLIApplication
Vi2> Set ti = ta.InterfaceInfoFromObject(ScriptControl1.CodeObject)
Vi2> Debug.Print ti.Name, ti.Members.Count
Vi2> For Each tm In ti.Members
Vi2> ' Имеет похожие методы, что и Procedure - v.Name, v.HasReturnValue, v.NumArgs
Vi2> Debug.Print tm.Name, tm.Parameters.Count
Vi2> Next
Vi2>
Где про это поподробнее почитать можно, там же?