текущая версия здесь: https://github.com/d-mozulyov/CrystalLUA (ver. 25/03/2013)
в архиве есть полная справка

Рад представить вашему вниманию труд, которым я горжусь особенно. CrystalLUA - это новое слово в связывании Delphi приложений и скриптов на популярном языке Lua. Для того чтобы оценить мощь и простоту библиотеки, достаточно следующего примера. Серьёзно, скачайте архив, возьмите lua.dll, добавьте CrystalLUA в uses и выполните этот код. Результат никого не оставит равнодушным ;)
procedure TForm1.Button1Click(Sender: TObject); var Lua: TLua; begin Lua := TLua.Create; Lua.RegClass( TForm1); Lua.RegVariable( 'Form1', Form1, typeinfo( TForm1)); Lua.RunScript( 'Form1 {Caption="Text", Position=poScreenCenter, Color=0x007F7F7F}'); // сразу несколько свойств Lua.Free; end;
Три слова, которыми я могу охарактеризовать CrystalLUA - стабильность, простота, производительность. Множество внутренних механизмов CrystalLUA обеспечат грамотное приведение типов и максимально точно определят ошибку, если она была допущена. Широкие возможности RTTI Delphi позволяют избавить пользователя от бесконечной рутины регистрации. Ряд тщательно взвешенных решений по оптимизации позволяет выжать из тандема Delphi + Lua максимум производительности.
---------------------------------------------------------------------------------------
Внимание!
Как раз сейчас производится подготовка к очередной большой доработке проекта (в т.ч. поддержка Unicode, Delphi >= 2009).
Как раз сейчас очень может понадобиться твоя помощь!
Если ты программируешь в Lua и Delphi (желательно CrystalLUA) прошу обратить своё внимание на это сообщение
---------------------------------------------------------------------------------------
А началось всё несколько лет назад, когда появилась острая необходимость связать код программы на языке Delphi со скриптовым кодом на языке Lua. Не мне вам рассказывать, что подобные средства для связи уже существуют. Однако те решения, которые видел я - не устраивали меня низким уровнем, низкой производительностью или всем сразу. А так как я имею достаточный опыт в разработке удобных быстродействующих средств, CrystalLUA стал моим основным проектом на несколько месяцев ). Кстати, написание "LUA" в названии проекта не случайно. CrystalLUA позиционируется как надстройка над стандартными средствами Lua. В чём именно состоят отличия - вы увидите в документации. Кстати файл документации слегка отстаёт, но я обещаю переработать его, дополнить и перевести на английский (чтобы о библиотеке знали не только русскоговорящие разработчики).
Сегодня в CrystalLUA вы можете следующее:
CrystalLUA поддерживает все известные мне типы: Boolean, ByteBool, WordBool, LongBool, Shortint, Byte, Smallint, Word, Longint(Integer), Longword(Dword, Cardinal), Int64, Single, Double, Extended, Comp, Currency, Char, WideChar, Enumeration, String, WideString, Variant, Pointer, TClass, Interface, экземпляры класса, структуры, массивы, множества, события.
На сегодняшний день библиотека работает под Ansi версии Delphi (т.е. <= 2007), однако как раз в данный момент ведётся проектирование и разработка поддержки Unicode. Кто знает, возможно в будущем появится поддержка FreePascal, C++ Builder, платформ Linux, MacOS, iOS, x64 и др. Дело в том, что проект делается на полном энтузиазме и лично мне в данный момент поддержка других платформ не нужна. Однако если ты заинтересован в какой-либо доработке и твёрд в своих намерениях - можешь обращаться - всё решаемо.
Хочу поблагодарить людей, которые советом и делом помогли создать CrystalLUA. Конечно их вклад не слишком велик, но без их помощи библиотека не была бы в том виде, котором вы её видите сейчас. Благодарности для RPGman, @!!ex, GrayFace.
Если вы обнаружили ошибку – у меня огромная просьба сообщать о ней в личке. По опыту прошлых лет, сообщения об ошибках в ветке наводят неприятные панические настроения. Поэтому давайте уважать других участников ветки, и если вы обнаружили ошибку - сообщайте мне в личку - обновления с коррективами выйдут достаточно оперативно.
Связаться со мной вы можете так же по ICQ: 250481638
или имейлу:
ваш Devil
DevilDevil
Хорошо что есть еще такие люди как ты :), которые на голом энтузиазме занимаются такими проектами !
у меня свои стимулы )
DevilDevil
Интересно получилось. Хорошо бы результат продублировать куда-нибудь на github или sourceforge, а то во-первых narod.ru со временем удаляет файлы, а во-вторых библиотека может понадобится кому-то не из СНГ и фиг он ее на народе найдет.
batment
1) проект не приоритетный, он лишь малая часть нужного мне (и который вряд ли когда станет публичным) движка
2) файл не удалится, потому что он вроде как бы "на моём сайте"
3) чтобы выкладывать зарубеж, надо справку перевести и версии хотя бы для Unicode Delphi сделать. У меня пока на это времени нет
CrystaLUA вроде бы лучше звучит, не?
Sergio
это не особо важно
"CrystalLUA" - называется так, потому что это часть CrystalEngine
а там все модули начинаются с Crystal
main
о май гад, нубы )
var Lua: TLua; begin Lua := CreateLua; Lua.RegClass(TForm1, true); Lua.RegVariable( 'Form1', Form1, typeinfo( TForm1)); Lua.RunScript( 'Form1.Color = 255'); // красный Lua.Free;
main
там прилагается документация
50 страниц больше недели катал между прочим )
самое основное - в "Быстрый старт" )
main
да, я такой же нуб )
Не получилось воспользоваться библиотекой. Ни в какую - пробовал на Delphi 6, Delphi 7.
Специально даже пробовал создать проект с приведенным здесь кодом:
>var
> Lua: TLua;
>begin
>Lua := CreateLua;
> Lua.RegClass(TForm1, true);
> Lua.RegVariable('Form1', Form1, typeinfo(TForm1));
> Lua.RunScript('Form1.Color = 255'); // красный
>Lua.Free;
Возникает Access Violation на RunScript, если пройтись отладчиком, то видно, что это происходит в lua_pcall.
Причем lua.dll в исключении не упоминается.
Если же скрипт содержит синтаксические ошибки, то они нормально отображаются. Иначе - вышеописанное.
Очень грустно.
DevilDevil
> var
> Lua: TLua;
> begin
> Lua := CreateLua;
> Lua.RegClass(TForm1, true);
> Lua.RegVariable('Form1', Form1, typeinfo(TForm1));
> Lua.RunScript('Form1.Color = 255'); // красный
> Lua.Free;
Анонимные объекты круче.
with CreateLua do try RegClass(TForm1, true); RegVariable( 'Form1', Form1, typeinfo( TForm1)); RunScript( 'Form1.Color = 255'); // красный finally Free; end;
Посидел еще немного с отладчиком, и выяснил причину ошибок.
Создаваемые библиотекой калбэки как-то работают через область данных, а в винде была включена защита от этого (DEP), итог - access violation.
Я добавил свою программу в список исключений, и вроде бы все заработало.
Что же делать?
Программа генерирует код в куче? Или что?
TarasB
> Программа генерирует код в куче?
Заглянь в сорцы из нулевого поста. Ищи function CreateCFunctionDump() :)
Тема в архиве.