Ковыряюсь с Windows Script Component (WSC)(механизм генерации COM объектов из XML файла).
Поизучал материалы:
https://msdn.microsoft.com/en-us/library/ms974602.aspx
https://perlhelp.web.cern.ch/PerlHelp/W ... nents.html
Возникла мысль попробовать собрать объект наследующий интерфейс IVBSAXContentHandler, чтобы сделать удобный SAX парсер XML для скриптов не создавая COM на VB6.
Почитал и выяснил, что WSC может наследовать интерфейсы за счёт тэга <implements> - https://perlhelp.web.cern.ch/PerlHelp/W ... ml#elemimp
The Implements Element
The Implements element enables you to include more COM interface handlers within your script.
Syntax:
<implements type="COMHandlerName" [id="internalName"] [default=fAssumed] >
Information related to the COMHandler goes here
</implements>
Но, к сожалению, выяснил, что наследуются только интерфейсы, которые включены в scrobj.dll (если я правильно понял). И параметр type может принимать только значения:
ASP - для наследования интерфейса внутри ASP страниц (связь с Response / Request объектами)
Behavior - для наследования интерфейса внутри HTML страниц (связь с событиями и элементами HTML страницы)
Automation - вот с этим не совсем понял. Для наследования интерфейса - OLE Automation ? Что это даёт ? Просто "высунуть" методы и свойства объекта ?
Решил поэкспериментировать с последним. Сваял компонент sax.sct (он во вложении к сообщению), добавил туда свойства и методы, которые должны быть наследованы и написал скрипт:
- Код: Выделить всё
Option Explicit
Dim SAXXMLReader, _
ContentHandler
Set SAXXMLReader = CreateObject("MSXML2.SAXXMLReader.6.0")
Set ContentHandler = GetObject("script:file:sax.sct")
MsgBox TypeName(ContentHandler)
Set SAXXMLReader.contentHandler = ContentHandler
Логично, что последняя строчка выдаёт сообщение Type Mismatch - Несоответствие типа. Вот тут то и возникло 2 вопроса:
1) Как происходит проверка типа объекта ? Т.е как SAXXMLReader узнаёт, что я скармливаю ему объект не того типа
2) Можно ли каким-то образом заставить WSC наследовать нужный мне интерфейс ?
Проект на VBScript и VB6 прикладываю к сообщению.