Снегопат

Обсуждение Снегопата
Текущее время: 22 ноя 2024, 23:19

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Reborn и OneScript
СообщениеДобавлено: 20 июн 2016, 10:04 
Не в сети

Зарегистрирован: 28 окт 2015, 08:17
Сообщения: 36
Уважаемые коллеги, нужна помощь коллективного разума.

Пытаюсь подружить reborn и snegopat, так как это вещи, которые должны дружить, без вариантов :). Это продолжение тем viewtopic.php?f=1&t=618&p=8271&hilit=onescript#p8271 и viewtopic.php?f=3&t=638&p=9232&hilit=onescript#p9232

disclaimer: сишник из меня как из никакой, практический опыт разработки ПО вне 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), и подготовить среду разработки. Почувствуй себя кулхацкером! :)

Сейчас ухожу в отпуск, то есть в ближайшие дни буду больше читатель, чем писатель. В начале июля попробую продолжить, но видимо не суперинтенсивно - отчетность…


Вложения:
1.gif
1.gif [ 93.35 КБ | Просмотров: 31199 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Reborn и OneScript
СообщениеДобавлено: 20 июн 2016, 11:00 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
То, что для работы со скриптами OneScript необходимо подгружать отдельную длл, а для работы js-скриптов не надо - это не так. Там точно также загружается jscript.dll, которая выполняет код на Javascript, периодически дёргая методы из snegapi, просто эта загрузка происходит неявно для пользователя. Вобщем-то, реализация работы с любыми видами аддинов в этом и заключается - реализовать свой загрузчик аддинов, который "самостоятельно реализует загрузку своих аддинов, самостоятельно их вызывает, дергает snegapi, и все это на уровне обертки для среды исполнения".
Пример такого загрузчика есть в "core\engine\scriptLoader.as" (загрузчик аддинов на ActiveScript-движках) и "core\engine\dllloader.as" (загрузчик аддинов-длл), их код и надо изучать.

То, что просмотрщик репозитария (repo.js) не видит скриптов на OneScript - естественно, так как механизм работы с аддинами предусматривался универсальным, и сами аддины становятся известными репозитарию через файлы *.info в каталоге list (парочка там лежит для примера). Подробнее написано в справке к встроенному аддину repo.js. То, что файлы js из корня репозитария видны сразу без использования info-файлов - небольшая уступка для личного удобства :)

Поэтому для реализации загрузки аддинов на OneScript - надо на AngelScript сделать свою реализацию интерфейсов AddinLoader, которая загружает и запускает скрипты на OneScript, и свою реализацию интерфейса Addin, которая будет служить для взаимодействия снегопата с загруженным аддином на OneScript - будет выдавать список макросов в аддине и вызывать их на выполнение.

Я попробую сделать это на этой неделе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Reborn и OneScript
СообщениеДобавлено: 20 июн 2016, 11:56 
Не в сети

Зарегистрирован: 28 окт 2015, 08:17
Сообщения: 36
Ооо, я знал, знал, что счастье возможно! Спасибо! :)
Если со временем туго, то я готов продолжить.
По repo.ts и .info как-то проморгал, спасибо.
А по отладке as можешь что-нибудь посоветовать (если, конечно, не сильно затруднит)?
Даже не столько отладка интересует, сколько упрощение анализа кода - логирование там, вывод в консоль значений, может еще какие есть доступные способы.
Просто боюсь у меня и неделей на адаптацию без начального пинка дело не обойдется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Reborn и OneScript
СообщениеДобавлено: 20 июн 2016, 12:14 
Не в сети

Зарегистрирован: 28 окт 2015, 08:17
Сообщения: 36
Цитата:
Пример такого загрузчика есть в "core\engine\scriptLoader.as" (загрузчик аддинов на ActiveScript-движках) и "core\engine\dllloader.as" (загрузчик аддинов-длл), их код и надо изучать.

О, вроде становится понятней, спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Reborn и OneScript
СообщениеДобавлено: 21 июн 2016, 09:55 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
syuzyov писал(а):
Ооо, я знал, знал, что счастье возможно! Спасибо! :)
Если со временем туго, то я готов продолжить.
По repo.ts и .info как-то проморгал, спасибо.
А по отладке as можешь что-нибудь посоветовать (если, конечно, не сильно затруднит)?
Даже не столько отладка интересует, сколько упрощение анализа кода - логирование там, вывод в консоль значений, может еще какие есть доступные способы.
Просто боюсь у меня и неделей на адаптацию без начального пинка дело не обойдется.

С отладкой в AS туговато. Есть начатки стороннего отладчика, и в первые snegopat.dll я его включал, но он что-то подглючивает, и я его пока отключил. Пока в основном использую "Message(text)" и "Print(text)". Еще есть "doLog(text)".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Reborn и OneScript
СообщениеДобавлено: 21 июн 2016, 11:04 
Не в сети

Зарегистрирован: 28 окт 2015, 08:17
Сообщения: 36
Спасибо. Поскольку для неофитов вроде меня AngelScript - один из существенных камней преткновения в изучении реборна, постараюсь систематизировать свой опыт, собрать все вопросы и ответы, и опубликовать в отдельной ветке - думаю многим это облегчит вход.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Reborn и OneScript
СообщениеДобавлено: 21 июн 2016, 11:17 
Не в сети

Зарегистрирован: 28 окт 2015, 08:17
Сообщения: 36
По ActiveScript: ознакомился с технологией, понял свои ошибки в рассуждениях.
Для работы с OneScript по аналогии с Javascript необходима реализация Active Script Engine, тогда достаточно будет немного доработать scriptLoader.as, и загрузка односкриптов будет работать через команду "Загрузить скрипт", верно?
Другой вариант: делать свой лоадер по аналогии с core\engine\dllloader.as, делать отдельную команду "Загрузить oscript", которая будет видна отдельным пунктом меню, верно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Reborn и OneScript
СообщениеДобавлено: 21 июн 2016, 11:29 
Не в сети

Зарегистрирован: 28 окт 2015, 08:17
Сообщения: 36
По репо: понял, что не нравится в плане user xp - интуитивно совсем другое ожидал, но это наверное тоже в отдельной теме лучше напишу чуть позже.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Reborn и OneScript
СообщениеДобавлено: 21 июн 2016, 11:53 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
syuzyov писал(а):
По ActiveScript: ознакомился с технологией, понял свои ошибки в рассуждениях.
Для работы с OneScript по аналогии с Javascript необходима реализация Active Script Engine, тогда достаточно будет немного доработать scriptLoader.as, и загрузка односкриптов будет работать через команду "Загрузить скрипт", верно?
Другой вариант: делать свой лоадер по аналогии с core\engine\dllloader.as, делать отдельную команду "Загрузить oscript", которая будет видна отдельным пунктом меню, верно?

Всё правильно. Единственное, при подключении из репозитария для пользователя видимой разницы между скриптами и os-скриптами не будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Reborn и OneScript
СообщениеДобавлено: 21 июн 2016, 22:30 
Не в сети

Зарегистрирован: 28 окт 2015, 08:17
Сообщения: 36
Очень хелп нидед.
Прошу прощения за нытье, но честное слово, начинаю впадать в уныние…
Потратил сегодняшний день на изучение снегопата (объектная модель, реализации членов классов, …) и angel script (сборка прототипа, прикрутка asPEEK в качестве отладчика, …) появилось куча вопросов (но это в отдельные темы лучше - очень много и очень разное). В конечном принял решение сейчас все-таки запуститься хоть как-нибудь с тем, что есть.
Сразу возникла проблема:
Нужно зарегистрировать лоадер при загрузке dll. Для старого снегопата имеем:
Код:
hr = invoke(addinsObj, DISPATCH_METHOD, NULL, NULL, NULL, L"registerLoader", L"U", loader);

На реборне получаю hr: 0x80020003 Член группы не найден, что в общем легко объясняется: если раньше у Designer.addins такой метод был, то теперь смотрим дамп snegopat.d.ts (кстати все-таки очень огорчает, что GetDocumentation в snepgopat не реализован, и отражение этого факта в документации ситуацию никак не улучшает):
Есть
Код:
declare var Designer: _IfaceDesigner;

ок, есть
Код:
interface _IfaceDesigner {
   addins: AddinMgr;

ок, есть
Код:
interface AddinMgr {
   root: AddinGroup;
   libs: AddinGroup;
   users: AddinGroup;
   sys: AddinGroup;
   lastAddinError: string;
   count: number;
   byUniqueName(name: string): Addin;
   byFullPath(fullPath: string): Addin;
   byIdx(idx: number): Addin;
   loadAddin(uri: string, group: AddinGroup): Addin;
   unloadAddin(addin: Addin): boolean;
   getLoaderCommands(): string[];
   selectAndLoad(loaderCommand: string, group: AddinGroup): Addin;
   isAddinUnloadable(addin: Addin): boolean;

Опаньки, куда делся registerLoader?
Начинаю искать, и нахожу описание его в 99 snegapi.md:
Код:
<a name="IAddinMgr"></a>
## Объект IAddinMgr
> портирован полностью
...
### Метод registerLoader
Регистрирует дополнительный загрузчик аддинов. 
Синтаксис:

    addins.registerLoader(Загрузчик)

Параметры:

  - Загрузчик. Объект [IAddinLoader](#IAddinLoader), реализующий дополнительный
    загрузчик аддинов.

Попробовал в отладчике js посмотреть Designer (ну мало ли), результат в (1) - метода нет.
В коде js или as registerLoader нигде не втречается. Встает законный вопрос - а как же scriploader и dllloader себя регистрируют, или кто их регистрирует? Без отладчика я не смог найти ответ за разумное время. Может это лоадеры-депутаты с двойными стандартами, которым можно то, что нельзя простым смертным лоадерам? Типа как js-скрипты, которые вне очереди и без пропусков отображаются в репо, пока vbs бумажки (.info) оформляют?

Понимаю, что меня уже несет, возможно мое незнание меня опять подводит, прошу понять и простить :)

Ну и собственно вопрос: как все-таки зарегистрировать свой лоадер?


Вложения:
1.gif
1.gif [ 14.36 КБ | Просмотров: 31108 ]
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB