JavaScript-парсер: Встроить в asm/c
Например, разрабатывая собственную скриптовую оболочку, я посчитал глупым придумывать свой скриптовый язык и синтаксис, да и лень как-то...
Считаю резонным просто прилинковать dll к своей программе.
Думаю, возможно меня будут бить. Мол, мало гуглил и офф-сайт невнимательно читал.
Но, с таким я сталкиваюсь впервые и задача кажется повышенной сложности для моего уровня.
Нужна литература с примерами.
Как объявить внутренные ресурсы моей программы доступными в скриптах как объекты и свойства?
Как объявить некоторые функции моей программы доступными в скриптах?
То же касается и различных событий и т.п.
Так же, интересует вопрос безопасности. Чтобы в скриптах нельзя было обращаться к ActiveX-модулям и пр...
Спасибо!
Например, разрабатывая собственную скриптовую оболочку, я посчитал глупым придумывать свой скриптовый язык и синтаксис
Правильный подход
Нужна литература с примерами.
Как объявить внутренные ресурсы моей программы доступными в скриптах как объекты и свойства?
Как объявить некоторые функции моей программы доступными в скриптах?
То же касается и различных событий и т.п.
Гугли на тему IScriptControl, embedded jscript и т.п.
Например:
http://www.codeproject.com/KB/COM/scriptdemo.aspx
http://www.codeproject.com/KB/cpp/ScriptYourApps.aspx
Спасибо! Пример пашет, разбираюсь.
Например:
Если среди аргументов функции в скрипте имеется new Array, то rgvarg[n].vt получается VT_DISPATCH, а не VT_ARRAY, как мною ожидалось. И выгуглить эту ситуацию не могу...
Теперь ожидаю, что меня ждёт достаточное количество подобных ситуаций.
Написал простейщий пример. Функция Line в скрипте строит GDI-линию, если указаны одни координаты. Если же указан текст, то выводит его по линии координат. А вот Array-таки никак не могу одолеть.
Появилось очень много вопросов. Можете ли посоветовать форум нужного профиля, где могут помочь или весомый ресурс доходчивой документации по построению скриптовых интерфейсов.
Среди вопросов имеются такие:
Как можно предоставить возможность в js-скрипте поддержку new Bitmap, new Brush, new Pen? Опыт работы с такими объектами есть. Проблема лишь в том, как имено в скрипте адекватно обрабатывать такое?
Спасибо за совет и помощь!
Питон? Хм, ну, я сталкивался с ним. Сетевой язык по-моему?
Вообще, cgi-скрипты очень сложные и не думаю, что питон мне понравится.
Ява-скрипт - самый распространённый и простой. По-крайней мере, для меня js и php - дружелюбная среда для разработок.
И самый БОЛЬШОЙ ПЛЮС js - никакой отдельной библиотеки не надо подключать! Всё в системе имеется и в Си все классы и типы описаны.
А Питон или Луа - это куча отдельных dll lib h hpp и т.д. А меня это не привлекает. Я библиотеки Bass и Fmod вынужденно использую. А так, люблю довольствоваться только стандартным!
Спасибо!
http://social.msdn.microsoft.com/Forums/ru-RU/ieextensiondevelopment/thread/6eed4449-f46d-440e-b164-5dec1f454475
для работы с элементами массивов...
Сейчас пытаюсь выгуглить обработку new Мой_объект...
Это, действительно, так. Но библиотека (.dll) там всего одна, да и ее можно встроить в экзешник. Зато очевидное преимущество - возросшая переносимость. Я это, не агитирую, просто может кому еще интересно будет узнать :)
Среди вопросов имеются такие:
Как можно предоставить возможность в js-скрипте поддержку new Bitmap, new Brush, new Pen? Опыт работы с такими объектами есть. Проблема лишь в том, как имено в скрипте адекватно обрабатывать такое?
Спасибо за совет и помощь!
Метод IScriptControl::AddObject регистрирует объект в пространстве имен скрипта. Объект должен реализовывать IDispatch (в основном ф-ии GetIDsOfNames и Invoke) или иметь прокси который это делает. После этого можно обращаться к св-вам объектов из скрипта.
Спасибо!
Но, у меня Visual Studio 6, версия в 100мб практически. Скачивал пять лет назад с DostLink. И никаких IScriptControl там не нашёл ни в каких файлах...
Сейчас вот гуглю и никак не найду толкового примера, чтобы функция возвращала хотя бы массив ( позиция мышки = UserAt.x и UserAt.y ), так-как мои функции возвращают лишь или числа, или строчки. А Dispatch непонятно как вернуть. Т.е. UserAt - функция, которая должна вернуть {x:<number>, y:<number>, key:<buttons>, etc...}
Нашёл в MSDN пример функции, компилится без проблем, но откуда вызывать её - ума не приложу...
Но, у меня Visual Studio 6, версия в 100мб практически. Скачивал пять лет назад с DostLink. И никаких IScriptControl там не нашёл ни в каких файлах...
а его там и не должно быть, это ActiveX он должен быть в Винде. Чтобы получить возможность работы с СОМ-компонентом нужно импортнуть его библиотеку типов (в VC для этого используется директива #import, вроде...).
Первое, что раздражает, интерфейс разрабатывался для Visual Basic... :(
Второе, за недельный труд и 20 часов головной боли (буквально) не сдвинулся ни на шаг.
Третье, интерфейс черезчур ...
Будто я сел в танк и читаю инструкцию:
Ход вперёд - потянуть на себя рычаги 1,3,5-9,14,17,25;
Ход назад - потянуть на себя рычаги 2,4,5-11,13-16,20;
Остальные комбинации запрещены!
Мораль: Чтобы сделать одну простую вещь, нужно произвести десять действий в строгой последовательности. Иные комбинации вызывают ошибку или исключение!!!
Кому в голову пришло такой интерфейс задумать? Неужели самому Биллу?
Я в давности собственный парсер-транслятор за 9 часов написал и отладил. А этот готовый скриптовый интерфейс неделю грызу... А в MSDN написаны примеры так, что нужно быть телепатом, чтобы догадаться, что имел автор в виду и откуда брал входные структуры.
Скачал пример функции я дня 4 назад, а только сегодня выгуглил, откуда брать ей указатель, чтобы вызвать.
И то оказалось, что пример реализует совсем не то, что я искал. Хотя и работает...
//Language engine to use
set_Language(BSTR pbstrLanguage);
//Language engine to use
set_Language(BSTR pbstrLanguage);
В смысле?
У меня Visual Studio 6. Программирую только в Си. Никаких Си++, MFC или билдеров. Всё на уровне API...
В примере у меня и так выбран JavaScript.
Проблема в том, что я не могу толком разобраться с самим COM-интерфейсом. И документация скудная. Я же говорю, даже не могу создать объект Mouse, обращение к которому возвращало результат {x:x_coord; y:y_coord} и т.д...
У меня Visual Studio 6. Программирую только в Си. Никаких Си++, MFC или билдеров. Всё на уровне API...
Гмм, а как тогда с COM вы собираетесь работать? :confused:
Вы не так меня поняли.
Я программирую на Си, а не Си++. т.е. ща пока лень, да и в основном не нужно заниматься изучением ++. Некоторые конструкции я понимаю, просто сам не занимаюсь их описанием.
Когда начинал только-только переходить от DOS на Windows, пользовался Visual Basic 4. А когда потом стал осваивать среду через Си, то понял, что VB - такая гадость!!! Для старта он подходит. Но, он же способен изуродовать представление о среде системы...
Повторяю, что изучая что-нибудь, тупо впихиваю Си++ пример из гугла в свою прогу, но основную задачу пишу API-средствами.
Вот как только решил в оболочку своей утилиты интегрировать Java-скрипты, тут начались проблемы.
Утилита является микро-сервером. Решил я дать возможность самому пользователю наращивать функциональность утилиты посредством скриптов. Поначалу разрабатывал свой простой скриптовый язык и синтаксис. Но... Потом подумал "Что за идиотизм!?" и решил просто использовать всю мощь готового JS-парсера. Тем более, отдельной библиотеки не требуется и в Си все заголовки и структуры имеются...
Вот тут-то я понял, что за все 15 лет программирования я даже и не имею права называться программистом! Не могу взять старт! Никак...
Я уже давал ссылку на Lua он существенно легче интегрируется в хост-приложение.
Не хочу обидеть, извеняюсь...
Но, какая разница, что я буду применять? JScript, VBScript, Lua или Logo с Алголом?
Интерфейс-то один: COM-Object со всякими Invoke и т.д...
Помоему, нужно сначала разобраться с самой логикой COM-интерфейса, а язык подключить можно одной строчкой... Не так ли? ;)
Спасибо, ребята!
Кхм, однако, первое, что мне не нравится в ЛУА - синтаксис. Я люблю Си. Именно поэтому эту тему назвал "JavaScript-парсер ...", а не "VBScript-..." например.
Знаю, это можно отнести к маразму, но я помешан на Си-синтаксисе. Пусть местами он сложен, но он гибкий. И поэтому я изучал одно время php, а не cgi или perl. И очень жалею, что mIRC-скрипты не си-подобные.
Да, эта зацикленность на Си - как нацизм или рассизм. Не хорошо...
Но, просто, может быть мне... лень!? Осваивать новый язык, синтаксис, возможности...
Я и Си изучал по знаниям Паскаля, а Паскаль, в своё время, по знаниям Бейсика! :)
И, к сожалению, один лишь GWBasic DOS'овский знал в совершенстве. А вот Форт, Лого, Паскаль и, тем более, Си - без "шпаргалок" изредка путался. Особенно в Си.
Пишу на Си всего восьмой год и со стыдом отношу себя к программистам на Си. Недавно понял: Не знаю я этот Си. За все годы так и не узнал...
А тут предлагаете Луа... Время будет, конечно, посмотрю...
Спасибо!
http://ru.wikipedia.org/wiki/Squirrel
Хотя я бы все же попытался использовать JS, т.к. он уже есть в любой Windows.
http://ru.wikipedia.org/wiki/Squirrel
Хотя я бы все же попытался использовать JS, т.к. он уже есть в любой Windows.
Да, "Белочка" - просто находка! И скомпилилась без проблем (за искл. пары строчек, где я закомментил). И консоль понравилась.
Буду вот теперь пробовать её:)
Спасибо!
Хотя, JS - ещё в силе. Доку толковую надо. Ищу...