Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lua
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
MqKnJt
1 / 1 / 0
Регистрация: 24.12.2009
Сообщений: 4
1

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

24.12.2009, 17:00. Просмотров 949. Ответов 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
Ответы с готовыми решениями:

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

С помощью компонента IBDataSet в BCB6 пытаюсь выполнить запрос...
С помощью компонента IBDataSet в BCB6 пытаюсь выполнить такой вот запрос:...

Пытаюсь использовать lua и haskell
Попытался я тут использовать lua для подсчёта сдвига точки. Вроде получилось,...

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

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

5
Otaka
1829 / 687 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
24.12.2009, 21:04 2
Не знаю, у меня функция os.exit() работает как надо(приложение убивается).
Ради проверки, попробуй-ка мою программку для редактирования субтитров. Там менюшка "Скрипт"/"Скрипт". В диалоговом окне впиши os.exit() и нажми "запустить скрипт".
1
Вложения
Тип файла: rar subEditor.rar (580.1 Кб, 91 просмотров)
Otaka
1829 / 687 / 55
Регистрация: 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
1829 / 687 / 55
Регистрация: 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

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

Иногда наблюдаю феномен
если кто знает, подскажите! время от времени наблюдаю такой феномен: в...

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


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

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

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