Уважаемые коллеги, нужна помощь коллективного разума.
Пытаюсь подружить reborn и snegopat, так как это вещи, которые должны дружить, без вариантов
. Это продолжение тем
viewtopic.php?f=1&t=618&p=8271&hilit=onescript#p8271 и
viewtopic.php?f=3&t=638&p=9232&hilit=onescript#p9232disclaimer: сишник из меня как из никакой, практический опыт разработки ПО вне 1С близок к нулю, по com прочитал по диагонали полторы книжки. Поэтому прошу понять и пояснить, если где-то по ходу текста пернул в лужу:).
Камрад EvilBeaver (На всякий случай: автор односкрипта. Андрей, спасибо за советы и моральную поддержку) с первым снегопатом односкрипт интегрировал так:
1. В снегопат подгружалась dll snegopat.engine.dll
2. Далее все манипуляции со односкриптами выполняла эта dll, дергая по необходимости snegapi (немного не так, но для упрощения опустил)
Что сделано для адаптации под реборн:
1. dll успешно подгружается в реборн. Загрузка и так осуществляется через invoke, поэтому все правки ограничились редактированием получаемых из реборна свойств (vttable идут уже при вызове исполнения):
Код:
InsertProperty("addins");
InsertProperty("develop"); //добавлен
//InsertProperty("cmdTrace"); - переехал в develop
InsertProperty("events");
InsertProperty("profileRoot");
InsertProperty("snegopat");
InsertProperty("hotkeys");
InsertProperty("windows");
InsertProperty("metadata");
InsertProperty("v8files");
InsertProperty("env"); //добавлен
//InsertProperty("ownerName"); - переехал в env
//InsertProperty("v8debug"); - не реализован
//InsertProperty("sVersion"); - переехал в env
//InsertProperty("v8Version"); - переехал в env
Все, дальше пока делать не стал.
Почему?
Потому что текущий вариант взаимодействия мне решительно не нравится:
1. Для загрузки односкриптов нужно сначала обязательно загрузить snegopat.engine, при этом решительно непонятно нахрена - чем OneScript хуже, чем JavaScript и VBScript, для работы с которыми, с т.з. конечного пользователя ничего не требуется?
2. В продолжение п. 1 кажется правильным знать снегопату об односкрипте как среде исполнения, но никак не наоборот.
3. В реборне из коробки нет возможности через стандартный интерфейс увидеть в репо скрипты с расширением, отличным от js (то есть даже vbs обделен). Лепить свой интерфейс для подключения аддинов кажется неправильным
4. Даже в старом снегопате не смог подцепить односкрипт на хоткей через интерфейс снегопата (может, конечно, я дурак, и очевидных вещей не знаю).
Фактически односкрипт живет своей жизнью рядом со снегопатом, самостоятельно реализует загрузку своих аддинов, самостоятельно их вызывает, дергает snegapi, и все это на уровне обертки для среды исполнения. Жуть имхо в общем, а EvilBeaver заслуживает прижизненного памятника на красной площади за проявленный героизм и находчивость
Предпринята попытка попробовать заставить реборн заглотить односкрипт "естественным" путем:
1. Поправлены скрипты реборна (repo.ts, scriptLoader.as), чтобы иметь возможность видеть в репо односкрипты, см. (1).Кстати, текущая реализация отображения в репо скриптов позволяет в одной папке показывать скрипты только с одним расширением, поэтому пока убран фильтр по расширению в классе репозитария (см. class RepoSystem в repo.ts)
2. Исследован код реборна до момента собственно выполнения скрипта:addins.as:
Код:
// Теперь пробуем запустить его
if (!fndLdr.value.run(addin)) {
Дальше затык (точнее отведенное на вчера время закончилось с большим оверхэдом):
1. Не умею отлаживать AngelScript, а на чистом понимании кода уж больно тяжко - слишком мало опыта
2. Здесь исполнение уходит в snegopat.dll, то есть для меня это черный ящик
Теперь вопросы:
To orefkov:
1. Саша, прокомментируй пожалуйста, есть ли какие-то помехи для такой реализации?
2. Если помех нет, то много ли потребуется менять в snegopat.dll? Если помехи есть, то хотелось бы понять, какие (пока не понимаю, чем в этом плане oscript хуже jscript).
3. Можно вкратце рассказать, что происходит дальше при вызове fndLdr.value.run(addin)?
4. Как отлаживать ангелскрипты? С чего начать? Куда копать? AngelscriptIDE? ASIDE? ...?
5. Если найдутся желающие помочь, может быть можно разместить официальный репо на github (без dll, естественно)? Или придется привыкать к fossil?
To all:
1. Какой вариант интеграции кажется более правильным? Первый вариант не требует Сашиного участия; второй более красивый, но не уверен, что можно обойтись без правки snegopat.dll малой кровью.
2. Есть ли желающие совместно поковыряться? Если что, готов поделиться опытом, как по-быстрому (за 20 часов) въехать в c++, com (точнее dispinterface), и подготовить среду разработки. Почувствуй себя кулхацкером!
Сейчас ухожу в отпуск, то есть в ближайшие дни буду больше читатель, чем писатель. В начале июля попробую продолжить, но видимо не суперинтенсивно - отчетность…