Форум программистов, компьютерный форум, киберфорум
Наши страницы

Lua

Войти
Регистрация
Восстановить пароль
 
MqKnJt
1 / 1 / 0
Регистрация: 24.12.2009
Сообщений: 4
#1

Вторую неделю пытаюсь подружить Lua и BCB6, и наблюдаю их несовместимость - Lua

24.12.2009, 17:00. Просмотров 936. Ответов 5
Метки нет (Все метки)

Вторую неделю пытаюсь подружить Lua и BCB6, и наблюдаю их несовместимость. Простой пример:
Код
os.exit()
У меня на этом скрипте приложение падало с ошибкой чтения памяти. Дело в том, что lua5.1.dll использует майкрософтовскую сишную run-time библиотеку msvcr80.dll, а BCB6 - свою собственную (cc3260.dll). Одни и те же функции (в данном случае exit()) вызываются из разных библиотек, что, видимо, вызывает конфликт. Одно из решений - скомпилировать Lua при помощи BCB и прилинковать его к нашему проекту статически или динамически. Тогда и скрипты и приложение будут обращаться к одним и тем же run-time функциям и все будет работать корректно. Вышеупомянутый скрипт, например, просто завершит приложение.

Но это только частично решает проблему. Для Lua существует множество модулей, написанных на Си и поставляемых в виде DLL, например, с Lua for Windows. Все они используют msvcr80.dll и, таким образом, становятся для нас непригодными. А среди них есть и весьма полезные.

Вопрос. Можно ли как-нибудь избежать использования двух run-time библиотек одновременно при использовании сишных модулей?

Боюсь, что вопрос риторический...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2009, 17:00
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вторую неделю пытаюсь подружить Lua и BCB6, и наблюдаю их несовместимость (Lua):

Пытаюсь выполнить задачу уже вторую неделю - Delphi
учитель дал задачу по делфи написать програму вот собственно содержание: мне хотябы мат. решение

С помощью компонента IBDataSet в BCB6 пытаюсь выполнить запрос... - C++ Builder
С помощью компонента IBDataSet в BCB6 пытаюсь выполнить такой вот запрос: select DEAL.INVOICE_ID, DEAL.INVOICE_CLCODE, ...

Пытаюсь использовать lua и haskell - Haskell
Попытался я тут использовать lua для подсчёта сдвига точки. Вроде получилось, но вот какая проблема, почему-то дико медленно :( в чём...

которую неделю пытаюсь залить свой сайт на различные бесплатные хостинги, - Бесплатный хостинг
Подскажите пожалуйста, которую неделю пытаюсь залить свой сайт на различные бесплатные хостинги, сейчас остановилась на Eu5.org, но когда...

Вторую неделю подряд рандомно вылетает синий экран - BSOD
Помогите пожалуйста! Практически ничего в этом не понимаю... Вторую неделю подряд вылетает синий экран, причем не от каких-то конкретных...

В массиве записан курс евро за 14 дней. Определить минимальное значение курса за первую неделю и максимальное за вторую - C (СИ)
В массиве записан курс евро за 14 дней. Определить минимальное значение курса за первую неделю и максимальное за вторую.

5
Otaka
1827 / 685 / 18
Регистрация: 11.12.2008
Сообщений: 1,019
24.12.2009, 21:04 #2
Не знаю, у меня функция os.exit() работает как надо(приложение убивается).
Ради проверки, попробуй-ка мою программку для редактирования субтитров. Там менюшка "Скрипт"/"Скрипт". В диалоговом окне впиши os.exit() и нажми "запустить скрипт".
1
Вложения
Тип файла: rar subEditor.rar (580.1 Кб, 91 просмотров)
Otaka
1827 / 685 / 18
Регистрация: 11.12.2008
Сообщений: 1,019
24.12.2009, 21:50 #3
Кстати, MqKnJt, а ты выполнил инициализацию библиотечных функций с помощью luaL_openlibs();?
0
MqKnJt
1 / 1 / 0
Регистрация: 24.12.2009
Сообщений: 4
24.12.2009, 22:27  [ТС] #4
Otaka, да, действительно os.exit() работает как надо. Но если запустить скрипт, использующий внешние бинарные модули, слинкованные с msvcr80.dll, то твое приложение упадет. Я, конечно, понимаю, что твое приложение для этого не предназначено, но я, возможно, буду использовать библиотеки из Lua for Windows.

Если у тебя есть время/желание, могу по шагам расписать как воспроизвести этот глюк.
  1. Качаешь, ставишь Lua for Windows.
  2. Запускаешь свое приложение, открываешь "Скрипт"/"Скрипт"/"Файл"/"Открыть"
  3. Вбиваешь в поле "Имя файла", ну, например "C:\Program Files\Lua\5.1\examples\im\view.wlua" (при условии, что LfW у тебя установлен в C:\Program Files)
  4. Жмешь "Открыть". В окошко загрузится скрипт.
  5. В самом начале вставь: package.cpath = "C:\\Program Files\\Lua\\5.1\\clibs\\?51.dll" (чтобы он внешние либы нашел)
  6. Нажми "Запустить". Откроется диалог открытия файла. Покажи на какой-нибудь графический файл. Скрипт его откроет и отобразит картинку в новом окне.
  7. Теперь закрой окно с картинкой, закрой окно "Скрипт", закрой приложение.
  8. Должно появиться сообщение "обнаружена ошибка. Приложение будет закрыто." (Правда, оно у меня не каждый раз появлялось )

Эта ошибка вылетает в lua_close(); когда освобождается память.

Цитата Сообщение от Otaka Посмотреть сообщение
Кстати, MqKnJt, а ты выполнил инициализацию библиотечных функций с помощью luaL_openlibs();?
Конечно.
0
Otaka
1827 / 685 / 18
Регистрация: 11.12.2008
Сообщений: 1,019
24.12.2009, 23:06 #5
Таки да, валится. Как-нибудь потом буду смотреть что ему можно сделать.
0
MqKnJt
1 / 1 / 0
Регистрация: 24.12.2009
Сообщений: 4
25.12.2009, 11:28  [ТС] #6
Otaka, если нароешь что-нибудь, отпишись здесь, пожалуйста.

Я думаю, причина в том, что приложение и внешние модули используют разные RTL. На данный момент я вижу только одно решение - перекомпилировать Lua и все сишные библиотеки Борландом, чтобы все использовали одну борландовскую RTL. Но это геморрой. Я вчера списался с ребятами из Lua for Windows, спросил, как бы перекомпилить всё. Они говорят, не знаем, мы используем уже готовые бинарники от поставщиков. Они все используют msvcr80.dll. Но, с другой стороны, они говорят, что работают с LuaDist чтобы LfW можно было бы скомпилить любым компилятором в будущих версиях. Х.з. что у них получится и когда...
0
25.12.2009, 11:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2009, 11:28
Привет! Вот еще темы с ответами:

Иногда наблюдаю феномен - Windows
если кто знает, подскажите! время от времени наблюдаю такой феномен: в винде(2000) не запущена ни одна программа, все процессы молчат, а...

Наблюдаю глюк файлов в модуле в VBA - VBA
Работаю с файлом эксель. В нем используется внешняя библиотека dll подключенная через модуль. Адрес и название этого файла обьявляется в...

Через несколько минут после подключения к интернету наблюдаю 100% загрузку процессора и комп обалденно тормозит - Удаление вирусов
Народ! Есть проблема. Кто в теме, подскажите. Дело вот в чем. Через несколько минут после подключения к интернету наблюдаю 100% загрузку...

Получить вторую последовательность, переставив в элементах исходной первую и вторую цифры - VBA
При помощи датчика случайных чисел вводится последовательность {ai}, состоящая из N (случайное число от 7 до 30) целых положительных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru