1 (2021-01-07 09:56:22 отредактировано swerg)

Тема: Где расположить 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, в этой теме предлагаю не обсуждать, это таки отдельное довольно хлипкое шаманство, которое хорошо обсуждалось на форуме QUIK. Основана беда с таким подходом - чтобы заработало надо существенно перерабатывать код библиотеки. Не всегда это возможно и рационально. На мой взгляд сделать две сборки библиотеки для разных версий Lua - проще и надежнее. В том числе с точки зрения переноса нового функционала.

2

Re: Где расположить dll-библиотеку для Lua5.3 и Lua5.4 в QUIK 8.11 ?

swerg пишет:

Есть идеи как это сделать лучше?

Как вариант разные названия библиотек под разные версии lua
например: w32_51.dll w32_53.dll w32_54.dll

и подключать банально проверяя версию
if(_VERSION=="Lua 5.3")then w32 = require("w32_53") end
if(_VERSION=="Lua 5.4")then w32 = require("w32_54") end

3

Re: Где расположить dll-библиотеку для Lua5.3 и Lua5.4 в QUIK 8.11 ?

Просто так переименовать файлы библиотек нельзя. Имя библиотеки завязано на название стартовой экспортируемой из DLL функции. Соответственно при изменении названия файла библиотеки необходимо менять и имя стартовой функции. Это можно сделать, конечно, но тогда код библиотеки будет ещё в одном месте отличаться от оригинала, что не здорово, по-моему.