<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[QUIK -> DDE &mdash; Где расположить dll-библиотеку для Lua5.3 и Lua5.4 в QUIK 8.11 ?]]></title>
		<link>https://quik2dde.ru/viewtopic.php?id=334</link>
		<atom:link href="https://quik2dde.ru/extern.php?action=feed&amp;tid=334&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Где расположить dll-библиотеку для Lua5.3 и Lua5.4 в QUIK 8.11 ?».]]></description>
		<lastBuildDate>Fri, 17 Feb 2023 04:34:19 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Где расположить dll-библиотеку для Lua5.3 и Lua5.4 в QUIK 8.11 ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4133#p4133</link>
			<description><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Просто так переименовать файлы библиотек нельзя. Имя библиотеки завязано на название стартовой экспортируемой из DLL функции. Соответственно при изменении названия файла библиотеки необходимо менять и имя стартовой функции.</p></blockquote></div><p>На самом деле можно. Только версию надо писать через дефис и без точек: w32-5_4.dll. У require есть фича отбрасывать в имени dll все, что после дефиса при поиске функции luaopen_*. </p><div class="codebox"><pre><code>require(&quot;w32-5_4&quot;)</code></pre></div><p>Это работает, проверьте.</p>]]></description>
			<author><![CDATA[null@example.com (barlone)]]></author>
			<pubDate>Fri, 17 Feb 2023 04:34:19 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4133#p4133</guid>
		</item>
		<item>
			<title><![CDATA[Re: Где расположить dll-библиотеку для Lua5.3 и Lua5.4 в QUIK 8.11 ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3434#p3434</link>
			<description><![CDATA[<p>ах, да! кириллицу в названиях папок НЕ использовать!&nbsp; если есть вариант лучше, чем я (в силу своего скудоумия) придумал для парсинга пути к файлу(parse_directory.lua), поделитесь пожалуйста.</p>]]></description>
			<author><![CDATA[null@example.com (kalikazandr)]]></author>
			<pubDate>Fri, 11 Feb 2022 12:22:42 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3434#p3434</guid>
		</item>
		<item>
			<title><![CDATA[Re: Где расположить dll-библиотеку для Lua5.3 и Lua5.4 в QUIK 8.11 ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3433#p3433</link>
			<description><![CDATA[<p>структура<br />C:/BotQuik<br />C:/BotQuik/lib<br />C:/BotQuik/lib/lua --lua lib<br />--сюда кладем w32 нужных версий (обязательно пробел между Lua и 5.х)<br />C:/BotQuik/lib/Lua 5.3 --dll<br />C:/BotQuik/lib/Lua 5.4</p><p>В корневой каталог квика кидаем вот этот модуль:<br /></p><div class="codebox"><pre><code>--parse_directory.lua
local parse = {}
function parse.parse(dir)
    local c, a, fn = 1
    while true do
        a, _ = string.find(dir, [[\]], c)
        if not a then
            fn = string.sub(dir, c)
            a, _ = string.find(fn, &quot;%.&quot;)
            fn = fn:sub(1, a-1)
            parse[#parse+1] = fn
            break
        end
        parse[#parse+1] = string.sub(dir, c, a-1)
        c = a + 1
    end
end

return parse</code></pre></div><p>в C:/BotQuik кидаем вот этот модуль:<br /></p><div class="codebox"><pre><code>--version.lua
local path = &quot;C:/BotQuik/&quot;
local V = _VERSION

package.path=package.path..&quot;;&quot;..path..&quot;?.lua&quot;
package.path=package.path..&quot;;&quot;..path..&quot;lib/lua/?.lua&quot;
package.cpath=package.cpath..&quot;;&quot;..path..&quot;lib/&quot;..V..&quot;/?.dll&quot;</code></pre></div><p>...и вот этого бота, либо создать под него отдельную папку в каталоге.<br /></p><div class="codebox"><pre><code>--test_V.lua
local w32
local exitflag
function OnInit(path)
    local pd = require&#039;parse_directory&#039;
    pd.parse(path) --получить массив папок
    __rootdir = pd[1]..&quot;\\&quot;..pd[2]
    __script_path = table.concat(pd,&quot;\\&quot;)
    __botname = table.remove(pd, #pd)
    ---[[
    message(&quot;OnInit\n&quot;..
        &quot;rootdir: &quot;..tostring(__rootdir)..&quot;\n&quot;..
        &quot;script_path: &quot;..tostring(__script_path)..&quot;\n&quot;..
        &quot;botname: &quot;..tostring(__botname), 2
    )
    --]]
    dofile(__rootdir..&quot;\\version.lua&quot;) --прописываем пути к папкам в зависимости от версии Lua
end

function main()
    w32 = require&#039;w32&#039;
    message(&quot;hWndQUIK= &quot;..w32.FindWindowEx(0, 0, &quot;InfoClass&quot;, &quot;&quot;))
    while not exitflag do sleep(1) end
end
function OnStop()
    exitflag = true
end</code></pre></div><p>есть 2 варианта запуска скрипта test_V.lua (и других соответственно)<br />1. просто добавить в Доступные скрипты &quot;C:/BotQuik/test_V.lua&quot;<br />2. чуть сложнее, но гибче, если используется несколько терминалов:<br />2.1 Создаем в корневом каталоге квик папку scripts, &quot;C:/QUIK/scripts&quot;<br />2.2 в папке scripts создаем папку(и) с кодом(ми) клиента &quot;C:/QUIK/scripts/2626**&quot;<br />2.3 добавляем в папку с скодом клиента такого бота с тем же именем &quot;C:/QUIK/scripts/2626**/test_V.lua&quot;:<br /></p><div class="codebox"><pre><code>--test_V.lua
dofile(&quot;C:/BotQuik/test_V.lua&quot;)</code></pre></div><p>2.4 добавить в Доступные скрипты &quot;C:/QUIK/scripts/2626**/test_V.lua&quot; и запустить.<br />2.5 теперь в OnInit при парсинге пути к файлу доступен код клиента<br />2.6 если в терминале несколько клиентов или несколько терминалов, то поправив один раз код в &quot;C:/BotQuik/test_V.lua&quot;, исправления будут доступны всем клиентам.</p>]]></description>
			<author><![CDATA[null@example.com (kalikazandr)]]></author>
			<pubDate>Fri, 11 Feb 2022 12:05:16 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3433#p3433</guid>
		</item>
		<item>
			<title><![CDATA[Re: Где расположить dll-библиотеку для Lua5.3 и Lua5.4 в QUIK 8.11 ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2940#p2940</link>
			<description><![CDATA[<p>Просто так переименовать файлы библиотек нельзя. Имя библиотеки завязано на название стартовой экспортируемой из DLL функции. Соответственно при изменении названия файла библиотеки необходимо менять и имя стартовой функции. Это можно сделать, конечно, но тогда код библиотеки будет ещё в одном месте отличаться от оригинала, что не здорово, по-моему.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Thu, 07 Jan 2021 11:49:44 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2940#p2940</guid>
		</item>
		<item>
			<title><![CDATA[Re: Где расположить dll-библиотеку для Lua5.3 и Lua5.4 в QUIK 8.11 ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2939#p2939</link>
			<description><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Есть идеи как это сделать лучше?</p></blockquote></div><p>Как вариант разные названия библиотек под разные версии lua<br />например: w32_51.dll w32_53.dll w32_54.dll</p><p>и подключать банально проверяя версию<br />if(_VERSION==&quot;Lua 5.3&quot;)then w32 = require(&quot;w32_53&quot;) end<br />if(_VERSION==&quot;Lua 5.4&quot;)then w32 = require(&quot;w32_54&quot;) end</p>]]></description>
			<author><![CDATA[null@example.com (BlaZed)]]></author>
			<pubDate>Thu, 07 Jan 2021 09:15:49 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2939#p2939</guid>
		</item>
		<item>
			<title><![CDATA[Где расположить dll-библиотеку для Lua5.3 и Lua5.4 в QUIK 8.11 ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2936#p2936</link>
			<description><![CDATA[<p>Я всегда был сторонником того, чтобы dll-файлы с внешними библиотеками для Lua следует помещать непосредственно в каталог с терминалом QUIK (т.е. в ту же папку, где info.exe). По-моему, это самый простой и надёжный путь, позволяющий не заморачиваться с настройкой путей к скриптам, при этом всё всегда надежно работает.</p><p>Но тут в QUIK 8.11 наступили неожиданные времена: одновременно нам доступна Lua 5.3 и Lua 5.4. Т.е. можно одновременно запускать разные скрипты, использующие внешние библиотеки, под разными версиями Lua. Сами dll-библиотеки, собранные для разных версий Lua, при этом не совместимы, это два разных файла но с одним названием.</p><p>Я теперь делаю так.<br />В каталоге с QUIK создал 2 папки:<br /></p><ul><li><p>\<strong>lib53</strong> - для скриптов, собранных под Lua 5.3</p></li><li><p>\<strong>lib54</strong> - для скриптов, собранных под Lua 5.4</p></li></ul><p>Первой строчкой скрипта пишу:</p><div class="codebox"><pre><code>package.cpath = package.cpath .. &quot;;&quot; .. getWorkingFolder() .. &quot;\\lib5&quot; .. _VERSION:sub(_VERSION:len()) .. &quot;\\?.dll&quot;</code></pre></div><p>Тогда скрипт сам настраивается на нужный путь к библиотекам в зависимости от версии Lua, в которой запущен скрипт, так что дальше делаем обычное require и все работает:</p><div class="codebox"><pre><code>w32 = require(&quot;w32&quot;)</code></pre></div><br /><p>Есть идеи как это сделать лучше?</p><p>PS<br />Изготовление универсальных сборок библиотек, умеющих волшебно определять и подстраиваться под версию Lua, в этой теме предлагаю не обсуждать, это таки отдельное довольно хлипкое шаманство, которое [url=https://forum.quik.ru/forum10/topic6053/?PAGEN_1=2]хорошо обсуждалось на форуме QUIK[/url]. Основана беда с таким подходом - чтобы заработало надо существенно перерабатывать код библиотеки. Не всегда это возможно и рационально. На мой взгляд сделать две сборки библиотеки для разных версий Lua - проще и надежнее. В том числе с точки зрения переноса нового функционала.</p><p>Еще интересное:<br /></p><ul><li><p>[url=viewtopic.php?id=293]Список полезных библиотек для Lua[/url]</p></li></ul>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Thu, 07 Jan 2021 05:51:32 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2936#p2936</guid>
		</item>
	</channel>
</rss>
