Тема: Где расположить dll-библиотеку для Lua5.3 и Lua5.4 в QUIK 8.11 ?
Я всегда был сторонником того, чтобы dll-файлы с внешними библиотеками для Lua следует помещать непосредственно в каталог с терминалом QUIK (т.е. в ту же папку, где info.exe). По-моему, это самый простой и надёжный путь, позволяющий не заморачиваться с настройкой путей к скриптам, при этом всё всегда надежно работает.
Но тут в QUIK 8.11 наступили неожиданные времена: одновременно нам доступна Lua 5.3 и Lua 5.4. Т.е. можно одновременно запускать разные скрипты, использующие внешние библиотеки, под разными версиями Lua. Сами dll-библиотеки, собранные для разных версий Lua, при этом не совместимы, это два разных файла но с одним названием.
Я теперь делаю так.
В каталоге с QUIK создал 2 папки:
\lib53 - для скриптов, собранных под Lua 5.3
\lib54 - для скриптов, собранных под Lua 5.4
Первой строчкой скрипта пишу:
package.cpath = package.cpath .. ";" .. getWorkingFolder() .. "\\lib5" .. _VERSION:sub(_VERSION:len()) .. "\\?.dll"
Тогда скрипт сам настраивается на нужный путь к библиотекам в зависимости от версии Lua, в которой запущен скрипт, так что дальше делаем обычное require и все работает:
w32 = require("w32")
Есть идеи как это сделать лучше?
PS
Изготовление универсальных сборок библиотек, умеющих волшебно определять и подстраиваться под версию Lua, в этой теме предлагаю не обсуждать, это таки отдельное довольно хлипкое шаманство, которое [url=https://forum.quik.ru/forum10/topic6053/?PAGEN_1=2]хорошо обсуждалось на форуме QUIK[/url]. Основана беда с таким подходом - чтобы заработало надо существенно перерабатывать код библиотеки. Не всегда это возможно и рационально. На мой взгляд сделать две сборки библиотеки для разных версий Lua - проще и надежнее. В том числе с точки зрения переноса нового функционала.
Еще интересное:
[url=viewtopic.php?id=293]Список полезных библиотек для Lua[/url]