Войти
ПроектыФорумУтилиты

Высокоуровневая библиотека CrystalLUA. Delphi + Lua

Страницы: 1 2 314 15 Следующая »
#0
21:01, 22 ноя. 2010

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

crystallua_logo_3 | Высокоуровневая библиотека CrystalLUA. Delphi + Lua

Рад представить вашему вниманию труд, которым я горжусь особенно. 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


#1
21:34, 22 ноя. 2010

DevilDevil
Хорошо что есть еще такие люди как ты :), которые на голом энтузиазме занимаются такими проектами !

#2
21:35, 22 ноя. 2010

у меня свои стимулы )

#3
0:46, 23 ноя. 2010

DevilDevil
Интересно получилось. Хорошо бы результат продублировать куда-нибудь на github или sourceforge, а то во-первых narod.ru со временем удаляет файлы, а во-вторых  библиотека может понадобится кому-то не из СНГ и фиг он ее на народе найдет.

#4
0:57, 23 ноя. 2010

batment
1) проект не приоритетный, он лишь малая часть нужного мне (и который вряд ли когда станет публичным) движка
2) файл не удалится, потому что он вроде как бы "на моём сайте"
3) чтобы выкладывать зарубеж, надо справку перевести и версии хотя бы для Unicode Delphi сделать. У меня пока на это времени нет

#5
11:19, 23 ноя. 2010
CrystaLUA вроде бы лучше звучит, не?
#6
11:24, 23 ноя. 2010

Sergio
это не особо важно
"CrystalLUA" - называется так, потому что это часть CrystalEngine
а там все модули начинаются с Crystal

#7
21:59, 24 ноя. 2010

main
о май гад, нубы )

var
  Lua: TLua;
begin
Lua := CreateLua;
  Lua.RegClass(TForm1, true);
  Lua.RegVariable('Form1', Form1, typeinfo(TForm1));
  Lua.RunScript('Form1.Color = 255'); // красный
Lua.Free;
#8
22:27, 24 ноя. 2010

main
там прилагается документация
50 страниц больше недели катал между прочим )
самое основное - в "Быстрый старт" )

#9
22:35, 24 ноя. 2010

main
да, я такой же нуб )

#10
16:59, 26 фев. 2011

Не получилось воспользоваться библиотекой. Ни в какую - пробовал на 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 в исключении не упоминается.
Если же скрипт содержит синтаксические ошибки, то они нормально отображаются. Иначе - вышеописанное.

Очень грустно.

#11
22:30, 26 фев. 2011

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;

#12
23:42, 26 фев. 2011

Посидел еще немного с отладчиком, и выяснил причину ошибок.

Создаваемые библиотекой калбэки как-то работают через область данных, а в винде была включена защита от этого (DEP), итог - access violation.
Я добавил свою программу в список исключений, и вроде бы все заработало.

Что же делать?

#13
0:00, 27 фев. 2011

Программа генерирует код в куче? Или что?

#14
13:04, 27 фев. 2011

TarasB
> Программа генерирует код в куче?
Заглянь в сорцы из нулевого поста. Ищи function CreateCFunctionDump() :)

Страницы: 1 2 314 15 Следующая »
ПроектыФорумУтилиты

Тема в архиве.