Снегопат
https://snegopat.ru/forum/

AngelScript: вопросы и пожелания
https://snegopat.ru/forum/viewtopic.php?f=3&t=721
Страница 2 из 2

Автор:  vikad [ 13 июл 2016, 16:55 ]
Заголовок сообщения:  Re: AngelScript: вопросы и пожелания

syuzyov писал(а):
3. Подменяем файл <VSC>\resources\app\extensions\cpp\package.json на приложенный (по умолчанию VSC = "C:\Program Files (x86)\Microsoft VS Code")

Насколько я поняла, этот файл просто добавляет для расширения .as поддержку синтаксиса cpp (пожалуйста, поправьте меня, если я не права). К тому же, при обновлении самого vs code этот файл будет перезатираться, а значит, так лучше не делать. Для этого есть штатные средства - в файле пользовательских настроек (Файл - Параметры - Параметры пользователя) нужно просто добавить настройку:
"files.associations": {
"*.as": "cpp"
}

Автор:  advali [ 15 июл 2016, 07:30 ]
Заголовок сообщения:  Re: AngelScript: вопросы и пожелания

Александр, если не сложно, небольшое видео или текстовое описание, как можно использовать свои angelscript. Как подключить, как вызывать из макросов и т.п. Понимаю, что времени не хватает, поэтому терпеливо жду.

Автор:  orefkov [ 15 июл 2016, 10:56 ]
Заголовок сообщения:  Re: AngelScript: вопросы и пожелания

advali писал(а):
Александр, если не сложно, небольшое видео или текстовое описание, как можно использовать свои angelscript. Как подключить, как вызывать из макросов и т.п. Понимаю, что времени не хватает, поэтому терпеливо жду.


Расширить движок снегопата можно скриптом на AngelScript.
Все файлы с расширением *.as из папок 'core\engine' и 'mods' загружаются в единый модуль и компилируются в
движок снегопата в момент его старта.

Если вам не нужно глубоко менять поведение снегопата, а достаточно добавить функционал в виде аддина,
то в снегопате есть простая возможность сделать встроенный аддин на AngelScript.
Для этого вам нужно создать класс наследник от BuiltinAddin, создать глобальный объект
этого класса, и в конструкторе вызвать конструктор базового класса.
Аддин будет показан в ветке "Служебные аддины"

Законченный пример прилагается.

Вложения:
mods.zip [1.77 КБ]
Скачиваний: 445

Автор:  syuzyov [ 19 июл 2016, 06:39 ]
Заголовок сообщения:  Re: AngelScript: вопросы и пожелания

vikad писал(а):
syuzyov писал(а):
3. Подменяем файл <VSC>\resources\app\extensions\cpp\package.json на приложенный (по умолчанию VSC = "C:\Program Files (x86)\Microsoft VS Code")

Насколько я поняла, этот файл просто добавляет для расширения .as поддержку синтаксиса cpp (пожалуйста, поправьте меня, если я не права). К тому же, при обновлении самого vs code этот файл будет перезатираться, а значит, так лучше не делать. Для этого есть штатные средства - в файле пользовательских настроек (Файл - Параметры - Параметры пользователя) нужно просто добавить настройку:
"files.associations": {
"*.as": "cpp"
}


Да, так гораздо лучше. А то я ведь сварщик ненастоящий :)
Спасибо!

Автор:  metaeditor [ 25 окт 2016, 20:29 ]
Заголовок сообщения:  Re: AngelScript: вопросы и пожелания

to orefkov:
расскажи пожалуйста как правильно подключать обработчики команд?

создаю объект "получатель" команд и подключаю его
Код:
class ScintillaDesignerCommandsHandler {
   void OnToggleBookmark(CmdHandlerParam& cmd) {
      MsgBox("OnToggleBookmark");
   }
};
ScintillaDesignerCommandsHandler sciCommandsHandler;
oneDesigner._events.addCommandHandler("{DE680E96-5826-4E22-834D-692E307A1D9C}", 11, createDispatchFromAS(&&sciCommandsHandler), "OnToggleBookmark");

но мой обработчик так и не вызывается

и ещё вопрос, как в angelscript можно получить "указатель" на массив?
есть некий массив array<int> вот его мне надо передать в процедуру в виде параметра у которого тип = LPARAM

UPD: добавил в обработчик второй параметр и всё заработало
void OnToggleBookmark(CmdHandlerParam& cmd, Variant& pVarResult)
так правильно?

Автор:  Magister [ 26 окт 2016, 21:47 ]
Заголовок сообщения:  Re: AngelScript: вопросы и пожелания

orefkov, и у меня вопрос. Можно ли как-то передавать 1C-объекты в скрипт/dll, не делая обертки на AS вручную?

Автор:  orefkov [ 27 окт 2016, 00:35 ]
Заголовок сообщения:  Re: AngelScript: вопросы и пожелания

Если речь идёт об объектах 1С, которые можно создать в "Новый", то можно, 1С сама умеет такие объекты оборачивать в COM.
Для этого 1С сама предоставляет val2var.
Она много где используется в движке снегопата, смотрите.

Если речь о нативных интерфейсах 1С, то нет. Я не стал этого делать, так как в большей части случаев параметры не совместимы с COM.

Автор:  orefkov [ 27 окт 2016, 10:00 ]
Заголовок сообщения:  Re: AngelScript: вопросы и пожелания

metaeditor писал(а):
to orefkov:
расскажи пожалуйста как правильно подключать обработчики команд?

создаю объект "получатель" команд и подключаю его
Код:
class ScintillaDesignerCommandsHandler {
   void OnToggleBookmark(CmdHandlerParam& cmd) {
      MsgBox("OnToggleBookmark");
   }
};
ScintillaDesignerCommandsHandler sciCommandsHandler;
oneDesigner._events.addCommandHandler("{DE680E96-5826-4E22-834D-692E307A1D9C}", 11, createDispatchFromAS(&&sciCommandsHandler), "OnToggleBookmark");

но мой обработчик так и не вызывается

и ещё вопрос, как в angelscript можно получить "указатель" на массив?
есть некий массив array<int> вот его мне надо передать в процедуру в виде параметра у которого тип = LPARAM

UPD: добавил в обработчик второй параметр и всё заработало
void OnToggleBookmark(CmdHandlerParam& cmd, Variant& pVarResult)
так правильно?

По поводу командных обработчиков. Имхо лучше или вешать их в сопутствующем js-скрипте, и из скрипта вызывать метод аддина, либо доработать в движке снегопата процедуру transmitCommandTrap, добавив вызов нативных AngelScript подписчиков. Постараюсь реализовать второй способ.
По массивам - array в AngelScript реализуется не самим AngelScript'ом, а подключаемым из хоста объектом с нужным интерфейсом. Поэтому никакой гарантии, что array<int> действительно внутри содержит массив интов - нет. Впрочем, снегопат подключает реализацию массивов именно массивами. И получить адрес самих данных можно попробовать через
mem::addressOf(arr[0])
либо самому создать массив как MemoryBuffer. Для чтения и записи памяти используется
Код:
mem::byte[адрес]
mem::word[адрес]
mem::dword[адрес]
mem::qword[адрес]
mem::real[адрес]
mem::dreal[адрес]

Страница 2 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/