Здравствуйте, Grolin.
> почему?
> Если не затруднит, то прокоментируйте ваше утверждение.
> Не понимаю, где тут крминал.
Дело в том, что Microsoft не сочли необходимым в 64-разрядных версиях
Windows пересобрать под 64-разряда все компоненты. В итоге, многие
библиотеки даже в 64-разрядных Windows остаются 32-разрядными.
В том числе и ScriptControl, а точнее порождающая его библиотека
msscript.ocx существует только в 32-разрядном варианте.
Вызов же 32-разрядных библиотек из 64-разрядного процесса напрямую приводит
к ошибке.
Именно поэтому код
let o = CreateObject("ScriptControl")
на 64-разрядном JAWS не приведёт к созданию объекта. Соответственно и все
остальные попытки дёргать переменную o будут бесполезны, так как она будет
просто null.
То есть вы можете использовать решение через ScriptControl, если уверены,
что ваш код будет запускаться только на 32-разрядных JAWS. Например, если
это какое-то решение чисто для себя и вы не работаете на 64-разрядных
системах.
Для примера в JAWS Translator есть место, где я использую ScriptControl, но
на 64-разрядных системах автоматический установщик скриптов специально
обрубает эту функциональность, чтобы у пользователей не было проблем.
В принципе, есть несколько возможных вариантов сделать обёртку для объектов
32-разрядных библиотек, чтобы дёргать их из 64-разрядных процессов. В
частности, путь через создание COM+. Однако это требует вмешательства в
систему, а значит усложнение процесса дистрибьюции приложения или скрипта,
да и лично я, честно говоря, так и не воспроизвёл это решение в
работоспособном варианте, так что по-прежнему представляю себе его лишь
теоретически. Наскоком за 5 минут в своё время не получилось, только систему
себе покурочил, а долго ковыряться было лень, да и особой практической
необходимости всё-таки не было.
Успехов. Никита.