<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Выгрузка библиотек]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Выгрузка библиотек форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sat, 02 May 2026 15:39:52 +0300</pubDate>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69774/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_3cEARukg" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br />nikolz<br />=============<br />Очень хочется познакомиться с этой темой по ffi поближе, но пока времени на это нет. Постараюсь по возможности потом как-нибудь в неё вникнуть, думаю будут и вопросы, но уже задавать их буду наверное в соответствующей теме. <br />
			<i>01.06.2023 09:18:55, Alexander.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69774/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69774/topic4425/</guid>
			<pubDate>Thu, 01 Jun 2023 09:18:55 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69593/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_brCSUKRC" href="/user/15768/" bx-tooltip-user-id="15768">Alexander</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> написал:<br /> &nbsp;<br />====quote====<br /><br /><br />=============<br /> &nbsp;нет это просто обертка второй<br />=============<br /> А ну да, точно. Это я что-то как-то бегло глянул. Конечно обёртка. Если ffi, там же прямо из скрипта нужная функция API вызывается, так вроде?<br />=============<br />ffi нельзя использовать в Lua5.3 или 5.4. &nbsp;ffi - это LuaJit.<br />----------------<br />Если мой аналог ffi, то это тоже dll.<br />---------------------<br />В любом случае, надо всатвлять в скрипт описание функций С, а в моих примерах этого нет. &nbsp; <br />
			<i>18.05.2023 06:40:39, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69593/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69593/topic4425/</guid>
			<pubDate>Thu, 18 May 2023 06:40:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69587/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_3X2V1Zwy" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/15768/" target="_blank" rel="nofollow">Alexander</a></noindex> написал:<br /> &nbsp;<br />====quote====<br /> <noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> &nbsp;написал:<br />ссылка для скачивания &nbsp;dll с функциями выгрузки <br /> &nbsp; <noindex><a href="https://transfiles.ru/cp4bi" target="_blank" rel="nofollow">https://transfiles.ru/cp4bi</a></noindex> &nbsp; <br /><br />выгрузить на Lua5.3 :<br />require&quot;nkDDD&quot;<br />nkDDD.freeDLL( имяВыгружаемойDLL)<br /><br />для выгрузки на СИ &nbsp;функция <br />void nkfreeDLL(char* pNameDLL)<br />-------------------------<br />Если что не так, пишите и выкладывайте Ваш пример, будет разбираться.<br />Мой пример на луа см выше<br />=============<br /> &nbsp; &nbsp;<noindex><a href="https://forum.quik.ru/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> &nbsp;, а первая которая просто через скрипт, я так понимаю работает по принципу как ffi? Я правда не смотрел реализации этой ffi.<br />=============<br /> нет это просто обертка второй<br />=============<br />А ну да, точно. Это я что-то как-то бегло глянул. Конечно обёртка. Если ffi, там же прямо из скрипта нужная функция API вызывается, так вроде? <br />
			<i>17.05.2023 23:06:55, Alexander.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69587/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69587/topic4425/</guid>
			<pubDate>Wed, 17 May 2023 23:06:55 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69528/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_u3ilis3v" href="/user/15768/" bx-tooltip-user-id="15768">Alexander</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> написал:<br />ссылка для скачивания &nbsp;dll с функциями выгрузки <br /> &nbsp;<noindex><a href="https://transfiles.ru/cp4bi" target="_blank" rel="nofollow">https://transfiles.ru/cp4bi</a></noindex> &nbsp;<br /><br />выгрузить на Lua5.3 :<br />require&quot;nkDDD&quot;<br />nkDDD.freeDLL( имяВыгружаемойDLL)<br /><br />для выгрузки на СИ &nbsp;функция <br />void nkfreeDLL(char* pNameDLL)<br />-------------------------<br />Если что не так, пишите и выкладывайте Ваш пример, будет разбираться.<br />Мой пример на луа см выше<br />=============<br /> &nbsp;<noindex><a href="https://forum.quik.ru/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> , а первая которая просто через скрипт, я так понимаю работает по принципу как ffi? Я правда не смотрел реализации этой ffi.<br />=============<br />нет это просто обертка второй <br />
			<i>14.05.2023 17:52:39, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69528/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69528/topic4425/</guid>
			<pubDate>Sun, 14 May 2023 17:52:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69520/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_1JCDKgoR" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br />ссылка для скачивания &nbsp;dll с функциями выгрузки <br /> <noindex><a href="https://transfiles.ru/cp4bi" target="_blank" rel="nofollow">https://transfiles.ru/cp4bi</a></noindex> <br /><br />выгрузить на Lua5.3 :<br />require&quot;nkDDD&quot;<br />nkDDD.freeDLL( имяВыгружаемойDLL)<br /><br />для выгрузки на СИ &nbsp;функция <br />void nkfreeDLL(char* pNameDLL)<br />-------------------------<br />Если что не так, пишите и выкладывайте Ваш пример, будет разбираться.<br />Мой пример на луа см выше<br />=============<br /><noindex><a href="https://forum.quik.ru/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex>, а первая которая просто через скрипт, я так понимаю работает по принципу как ffi? Я правда не смотрел реализации этой ffi. <br />
			<i>13.05.2023 20:22:01, Alexander.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69520/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69520/topic4425/</guid>
			<pubDate>Sat, 13 May 2023 20:22:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69519/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Ха-Ха-Ха. Всё!!! Ребята!!! Я долго ржал не мог поверить в увиденное. Но это так. Нашлась долгожданная причина невыгрузки. Имя файла dll было luacdllopt.dll, внутри функция через которую вызываются из скрипта функции dll - luaopen_luacdllopt, ну т.е. все вызовы я делал через переменную так:<br /><br />luacdllopt = require(&quot;luacdllopt&quot;)<br />luacdllopt.имя функции<br /><br />Так вот поменял имя проекта на luacdllopts и имя функции на luaopen_luacdllopts и всё заработало - всё без проблем выгружается и файл удаляется! Пробовал и другие разные имена - всё работает как надо!!!!!! Как только возвращаешь имена обратно на luacdllopt - так всё, никак файл не удаляется. Как такое получается и чей это косяк - толи самого квика, толи Lua тут не определишь, но точно чей то из них. Какая то функция некорректно обрабатывает имена видимо. И вот из-за такой мелочи потрачено столько времени, и грустно и смешно просто. Кто хочет можете у себя попробовать задать такие же имена как у меня были, посмотрите будет такой же негативный эффект или нет. <br />
			<i>13.05.2023 20:13:17, Alexander.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69519/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69519/topic4425/</guid>
			<pubDate>Sat, 13 May 2023 20:13:17 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69517/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			ссылка для скачивания &nbsp;dll с функциями выгрузки <br /><noindex><a href="https://transfiles.ru/cp4bi" target="_blank" rel="nofollow">https://transfiles.ru/cp4bi</a></noindex><br /><br />выгрузить на Lua5.3 :<br />require&quot;nkDDD&quot;<br />nkDDD.freeDLL( имяВыгружаемойDLL)<br /><br />для выгрузки на СИ &nbsp;функция <br />void nkfreeDLL(char* pNameDLL)<br />-------------------------<br />Если что не так, пишите и выкладывайте Ваш пример, будет разбираться.<br />Мой пример на луа см выше <br />
			<i>13.05.2023 17:02:33, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69517/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69517/topic4425/</guid>
			<pubDate>Sat, 13 May 2023 17:02:33 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69514/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_a7atNiFs" href="/user/15768/" bx-tooltip-user-id="15768">Alexander</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/2047/" target="_blank" rel="nofollow">Станислав</a></noindex> написал:<br />Настройте динамическое название библиотеки, например, mylib-723cf36f.dll, где 723cf36f - динамический хеш. Да, будут оставаться файлы старых версий и в памяти и на диске, но их можно подчищать после закрытия терминала.<br />=============<br /> Как это сделать? Можно поподробней.<br />=============<br />Напишите макрос для post-build события сборки, который будет переименовывать файл. Готового решения у меня нет. <br />
			<i>13.05.2023 14:12:35, Станислав.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69514/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69514/topic4425/</guid>
			<pubDate>Sat, 13 May 2023 14:12:35 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69511/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_7mhW8B78" href="/user/2047/" bx-tooltip-user-id="2047">Станислав</a> написал:<br />Настройте динамическое название библиотеки, например, mylib-723cf36f.dll, где 723cf36f - динамический хеш. Да, будут оставаться файлы старых версий и в памяти и на диске, но их можно подчищать после закрытия терминала.<br />=============<br />Как это сделать? Можно поподробней. <br />
			<i>13.05.2023 12:25:20, Alexander.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69511/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69511/topic4425/</guid>
			<pubDate>Sat, 13 May 2023 12:25:20 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69510/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_9sFJBVpK" href="/user/16086/" bx-tooltip-user-id="16086">Вадим Никитин</a> написал:<br />Вот это тоже странно, если библиотека, которую вы приводили здесь не выгружается указанными способами, то что-то явно не так. Она же вообще не создаёт никаких ресурсов, значит FreeLibrary должен её освободить. Попробуйте через Process Explorer от Руссиновича посмотреть, какие процессы её используют. Вроде он показывает кем захвачен файл. Может и более простой есть способ, но я давно в Windows не копался.<br />=============<br />Да тут далеко ходить не надо. Я выше писал и скрин выкладывал, что при попытке удалить файл .dll библиотеки если не через Total Commander, а через стандартный Проводник(explorer.exe), то вылазит сообщение, не как у Тотала - &quot;снимите защиту от записи&quot;, а чётко и ясно, что файл ещё используется &quot;Информационная система QUIK...&quot;. Так что тут сто процентов QUIK не даёт сам, ну или Lua. <br />
			<i>13.05.2023 12:22:10, Alexander.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69510/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69510/topic4425/</guid>
			<pubDate>Sat, 13 May 2023 12:22:10 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69509/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_NEuxLHEp" href="/user/1103/" bx-tooltip-user-id="1103">Kalmar</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/15768/" target="_blank" rel="nofollow">Alexander</a></noindex> написал:<br /> &nbsp;<br />====quote====<br /> <noindex><a href="/user/1103/" target="_blank" rel="nofollow">Kalmar</a></noindex> &nbsp;написал:<br /> &nbsp; <br />====quote====<br /> &nbsp;<noindex><a href="/user/15768/" target="_blank" rel="nofollow">Alexander</a></noindex> &nbsp; написал:<br />Тут что-то другое, DLL выгружается, а файл почему-то не закрыт, я такие выводы делаю, хотя я сам этот файл вообще не трогаю, ну в смысле не открываю его.<br />=============<br /> &nbsp; -На момент выгрузки все счётчики нулевые?<br />-Дебагер, в списке загруженных модулей показывает либу<br />=============<br /> &nbsp;Загрузил квик. Загрузил скрипт. Он загружает DLL один раз в самом начале. Скрипт отработал. DLL осталась. Выгрузка принудительно показывает, что выгрузка - OK! Ошибок FreeLibrary не выдаёт. Но файл не удалить. Я даже простую DLL, фактически пустую загружаю и скрипт с одной функцией вызова из неё и то же самое. Здесь что-то странное вообще получается. Раньше помница вроде как всё же после скрипта DLL выгружалась сама. Что после произошло и происходит надо понять.<br />=============<br /> Ну так счетчики-то нулевые или нет?<br />В дебагере после выгрузки модуль виден или нет?<br />=============<br /><noindex><a href="https://forum.quik.ru/user/1103/" target="_blank" rel="nofollow">Kalmar</a></noindex>, здесь я не совсем понял, что имелось ввиду про виден модуль или нет. Виден модуль в смысле каким образом? Есть у меня такой тест:<br /><br /> &nbsp;PrintDbgStr(&quot;\nТаблица загруженных модулей package.loaded:&quot;)<br /><br /> &nbsp;for k,v in pairs(package.loaded) do<br /> &nbsp; &nbsp;PrintDbgStr(string.format(&quot;%s=%s&quot;, k, tostring(v)))<br /> &nbsp;end<br /><br /> &nbsp;PrintDbgStr(&quot;\nТаблица &nbsp;сохранённых загрузчиков package.preload:&quot;)<br /><br /> &nbsp;for k,v in pairs(package.preload) do<br /> &nbsp; &nbsp;PrintDbgStr(string.format(&quot;%s=%s&quot;, k, tostring(v)))<br /> &nbsp;end<br /><br /> &nbsp;PrintDbgStr(&quot;\nТаблица &nbsp;спользуемая require для контроля как загружать модули package.searchers:\n&quot;)<br /><br /> &nbsp;for k,v in pairs(package.searchers) do<br /> &nbsp; &nbsp;PrintDbgStr(string.format(&quot;%s=%s&quot;, k, tostring(v)))<br /> &nbsp;end<br /><br />PrintDbgStr(&quot;\nЗагружен модуль: &quot; .. tostring(package.loaded&#91;&quot;luacdllopt&quot;&#93;))<br />PrintDbgStr(&quot;\nЗагружен модуль: &quot; .. tostring(package.loaded&#91;&quot;string&quot;&#93;.table))<br /><br />Так вот даже когда у меня моя DLL загружена, то этот тест не показывает мою DLL в списке загруженных вообще. И я вообще не понимаю как там этот Lua, что организовывает у себя, так как если скрипт-тест запускать несколько раз, то каждый раз адреса почему-то разные выводит даже для своих стандартных модулей.<br />Вот ниже вывод 2-х запусков подряд, моя DLL в этот момент загружена, иногда от неё проскальзывают сообщения. Моя DLL - вторая строчка снизу:<br /><br />00000001	11:56:48	&#91;6636&#93; 	<br />00000002	11:56:48	&#91;6636&#93; Таблица загруженных модулей package.loaded:	<br />00000003	11:56:48	&#91;6636&#93; package=table: 00000260392A0560	<br />00000004	11:56:48	&#91;6636&#93; bit=table: 0000026039408A40	<br />00000005	11:56:48	&#91;6636&#93; math=table: 0000026039408A00	<br />00000006	11:56:48	&#91;6636&#93; utf8=table: 0000026039408600	<br />00000007	11:56:48	&#91;6636&#93; string=table: 00000260394085C0	<br />00000008	11:56:48	&#91;6636&#93; _G=table: 00000260392A06E0	<br />00000009	11:56:48	&#91;6636&#93; coroutine=table: 0000026039408680	<br />00000010	11:56:48	&#91;6636&#93; table=table: 0000026039408900	<br />00000011	11:56:48	&#91;6636&#93; debug=table: 0000026039408D00	<br />00000012	11:56:48	&#91;6636&#93; io=table: 0000026039408B40	<br />00000013	11:56:48	&#91;6636&#93; os=table: 0000026039408240	<br />00000014	11:56:48	&#91;6636&#93; 	<br />00000015	11:56:48	&#91;6636&#93; Таблица &nbsp;сохранённых загрузчиков package.preload:	<br />00000016	11:56:48	&#91;6636&#93; 	<br />00000017	11:56:48	&#91;6636&#93; Таблица &nbsp;спользуемая require для контроля как загружать модули package.searchers:	<br />00000018	11:56:48	&#91;6636&#93; 1=function: 00000260392A05E0	<br />00000019	11:56:48	&#91;6636&#93; 2=function: 00000260394088C0	<br />00000020	11:56:48	&#91;6636&#93; 3=function: 0000026039408CC0	<br />00000021	11:56:48	&#91;6636&#93; 4=function: 0000026039408700	<br />00000022	11:56:48	&#91;6636&#93; 	<br />00000023	11:56:48	&#91;6636&#93; Загружен модуль: nil	<br />00000024	11:56:48	&#91;6636&#93; 	<br />00000025	11:56:48	&#91;6636&#93; Загружен модуль: nil	<br />00000026	11:56:48	&#91;6636&#93; A = table: 000002602C50AAD0	<br />00000027	11:56:48	&#91;6636&#93; luacdllopt&#91;DllMain&#93;&#91;DLL_THREAD_DETACH&#93;: thread with ID = 0x1570 is joining to DLL	<br />00000028	11:56:48	&#91;6636&#93; luacdllopt&#91;DllMain&#93;&#91;DLL_THREAD_DETACH&#93;: thread &#91;ID = 0x1570&#93; is detaching from DLL	<br />00000029	12:02:08	&#91;6636&#93; 	<br />00000030	12:02:08	&#91;6636&#93; Таблица загруженных модулей package.loaded:	<br />00000031	12:02:08	&#91;6636&#93; utf8=table: 0000026039408B00	<br />00000032	12:02:08	&#91;6636&#93; bit=table: 0000026039408BC0	<br />00000033	12:02:08	&#91;6636&#93; string=table: 0000026039408A40	<br />00000034	12:02:08	&#91;6636&#93; table=table: 0000026039408F40	<br />00000035	12:02:08	&#91;6636&#93; package=table: 0000026039408D00	<br />00000036	12:02:08	&#91;6636&#93; _G=table: 0000026039408240	<br />00000037	12:02:08	&#91;6636&#93; debug=table: 0000026039408B40	<br />00000038	12:02:08	&#91;6636&#93; coroutine=table: 00000260394082C0	<br />00000039	12:02:08	&#91;6636&#93; math=table: 0000026039408A80	<br />00000040	12:02:08	&#91;6636&#93; io=table: 00000260394086C0	<br />00000041	12:02:08	&#91;6636&#93; os=table: 0000026039408B80	<br />00000042	12:02:08	&#91;6636&#93; 	<br />00000043	12:02:08	&#91;6636&#93; Таблица &nbsp;сохранённых загрузчиков package.preload:	<br />00000044	12:02:08	&#91;6636&#93; 	<br />00000045	12:02:08	&#91;6636&#93; Таблица &nbsp;спользуемая require для контроля как загружать модули package.searchers:	<br />00000046	12:02:08	&#91;6636&#93; 1=function: 0000026039408580	<br />00000047	12:02:08	&#91;6636&#93; 2=function: 0000026039408600	<br />00000048	12:02:08	&#91;6636&#93; 3=function: 0000026039408540	<br />00000049	12:02:08	&#91;6636&#93; 4=function: 0000026039408940	<br />00000050	12:02:08	&#91;6636&#93; 	<br />00000051	12:02:08	&#91;6636&#93; Загружен модуль: nil	<br />00000052	12:02:08	&#91;6636&#93; 	<br />00000053	12:02:08	&#91;6636&#93; Загружен модуль: nil	<br />00000054	12:02:08	&#91;6636&#93; A = table: 000002602C50AA50	<br />00000055	12:02:08	&#91;6636&#93; luacdllopt&#91;DllMain&#93;&#91;DLL_THREAD_DETACH&#93;: thread with ID = 0x2A74 is joining to DLL	<br />00000056	12:02:08	&#91;6636&#93; luacdllopt&#91;DllMain&#93;&#91;DLL_THREAD_DETACH&#93;: thread &#91;ID = 0x2A74&#93; is detaching from DLL	<br /><br />Так что, как можно заметить мой модуль не показывает вообще. Как его увидеть в загруженных не знаю. Это если через Lua. <br />
			<i>13.05.2023 12:16:30, Alexander.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69509/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69509/topic4425/</guid>
			<pubDate>Sat, 13 May 2023 12:16:30 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69508/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Настройте динамическое название библиотеки, например, mylib-723cf36f.dll, где 723cf36f - динамический хеш. Да, будут оставаться файлы старых версий и в памяти и на диске, но их можно подчищать после закрытия терминала. <br />
			<i>13.05.2023 11:21:17, Станислав.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69508/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69508/topic4425/</guid>
			<pubDate>Sat, 13 May 2023 11:21:17 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69507/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Упс, опечаточка.<br /><br />Там 1 ГБ не в секунду а в час:) <br />
			<i>13.05.2023 07:18:39, Вадим Никитин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69507/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69507/topic4425/</guid>
			<pubDate>Sat, 13 May 2023 07:18:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69506/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_1AHkVEPW" href="/user/15768/" bx-tooltip-user-id="15768">Alexander</a>,<br /><br /><br />====quote====<br />Перезапуск как таковой не сложен. А вот время он занимает прилично, и это утомляет.<br />=============<br />Полностью согласен, долго запускается. Запуск MS VS и загрузка проекта в неё и то быстрее происходят:)<br /><br />Это странно, ведь грузится-то он даже ещё не скачивая данные с сервера, да и вообще не подключаясь к нему. Он походу парсит все сохранённые данные по всем инструментам во всех таблицах в одном главном потоке, хотя это и не обязательно для старта.<br /><br /><br />====quote====<br />Я даже простую DLL, фактически пустую загружаю и скрипт с одной функцией вызова из неё и то же самое.<br />=============<br />Вот это тоже странно, если библиотека, которую вы приводили здесь не выгружается указанными способами, то что-то явно не так. Она же вообще не создаёт никаких ресурсов, значит FreeLibrary должен её освободить. Попробуйте через Process Explorer от Руссиновича посмотреть, какие процессы её используют. Вроде он показывает кем захвачен файл. Может и более простой есть способ, но я давно в Windows не копался.<br /><br /><br />====quote====<br />10.0.1.18<br />=============<br /><br />====quote====<br />Lua 5.3.5<br />=============<br />Как то в одной из версий QUIK 9 появилась регрессия, что даже такой скрипт
====code====
<pre>function main()
&nbsp;&nbsp;&nbsp;&nbsp;while true do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(1000)
&nbsp;&nbsp;&nbsp;&nbsp;end
end
</pre>
=============
приводил к утечке памяти со скоростью около 1 ГБ в секунду. Потом исправили, вроде. Но я до сих пор на QUIK 8.13.1.16. Мало ли что:)<br /><br />Так что это может быть одна из очередных регрессий. А раньше оно работало, возможно потому, что GC у Lua, просто успевал как-то сразу очищать таблицу модулей, вызывая FreeLibrary. Хотя это, скорее всего тоже случайность, ведь его поведение не очень детерминировано.<br /><br />В десятке плагин Lua могли доработать так, что теперь это не происходит, а может ещё и файл остаётся где-то открытым. Но это домыслы. Нужна отладка того, что там происходит. Только говорят, что в десятке сделали защиту от отладки:)<br /><br />Даже интересно стало, попробую как будет время покопаться а этой теме. <br />
			<i>13.05.2023 07:15:57, Вадим Никитин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69506/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69506/topic4425/</guid>
			<pubDate>Sat, 13 May 2023 07:15:57 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69505/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_MEVKOI28" href="/user/15768/" bx-tooltip-user-id="15768">Alexander</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/1103/" target="_blank" rel="nofollow">Kalmar</a></noindex> написал:<br /> &nbsp;<br />====quote====<br /> <noindex><a href="/user/15768/" target="_blank" rel="nofollow">Alexander</a></noindex> &nbsp;написал:<br />Тут что-то другое, DLL выгружается, а файл почему-то не закрыт, я такие выводы делаю, хотя я сам этот файл вообще не трогаю, ну в смысле не открываю его.<br />=============<br /> &nbsp;-На момент выгрузки все счётчики нулевые?<br />-Дебагер, в списке загруженных модулей показывает либу<br />=============<br /> Загрузил квик. Загрузил скрипт. Он загружает DLL один раз в самом начале. Скрипт отработал. DLL осталась. Выгрузка принудительно показывает, что выгрузка - OK! Ошибок FreeLibrary не выдаёт. Но файл не удалить. Я даже простую DLL, фактически пустую загружаю и скрипт с одной функцией вызова из неё и то же самое. Здесь что-то странное вообще получается. Раньше помница вроде как всё же после скрипта DLL выгружалась сама. Что после произошло и происходит надо понять.<br />=============<br />Ну так счетчики-то нулевые или нет?<br />В дебагере после выгрузки модуль виден или нет? <br />
			<i>13.05.2023 04:56:10, Kalmar.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69505/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69505/topic4425/</guid>
			<pubDate>Sat, 13 May 2023 04:56:10 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69504/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_NK4ZvIoE" href="/user/15768/" bx-tooltip-user-id="15768">Alexander</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/16086/" target="_blank" rel="nofollow">Вадим Никитин</a></noindex> написал:<br /> <noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> , поддерживаю, очень хорошая книга.<br /><br /> <noindex><a href="/user/15768/" target="_blank" rel="nofollow">Alexander</a></noindex> , а какой версии вы используете QUIK и Lua к нему?<br />=============<br /> 10.0.1.18<br />=============<br />Lua 5.3.5 <br />
			<i>12.05.2023 22:13:33, Alexander.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69504/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69504/topic4425/</guid>
			<pubDate>Fri, 12 May 2023 22:13:33 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69503/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_0PLihzgf" href="/user/1103/" bx-tooltip-user-id="1103">Kalmar</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/15768/" target="_blank" rel="nofollow">Alexander</a></noindex> написал:<br />Тут что-то другое, DLL выгружается, а файл почему-то не закрыт, я такие выводы делаю, хотя я сам этот файл вообще не трогаю, ну в смысле не открываю его.<br />=============<br /> -На момент выгрузки все счётчики нулевые?<br />-Дебагер, в списке загруженных модулей показывает либу<br />=============<br />Загрузил квик. Загрузил скрипт. Он загружает DLL один раз в самом начале. Скрипт отработал. DLL осталась. Выгрузка принудительно показывает, что выгрузка - OK! Ошибок FreeLibrary не выдаёт. Но файл не удалить. Я даже простую DLL, фактически пустую загружаю и скрипт с одной функцией вызова из неё и то же самое. Здесь что-то странное вообще получается. Раньше помница вроде как всё же после скрипта DLL выгружалась сама. Что после произошло и происходит надо понять. <br />
			<i>12.05.2023 22:08:03, Alexander.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69503/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69503/topic4425/</guid>
			<pubDate>Fri, 12 May 2023 22:08:03 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69502/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_OvOVsT7q" href="/user/16086/" bx-tooltip-user-id="16086">Вадим Никитин</a> написал:<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex>, поддерживаю, очень хорошая книга.<br /><br /><noindex><a href="/user/15768/" target="_blank" rel="nofollow">Alexander</a></noindex>, а какой версии вы используете QUIK и Lua к нему?<br />=============<br />10.0.1.18 <br />
			<i>12.05.2023 22:01:00, Alexander.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69502/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69502/topic4425/</guid>
			<pubDate>Fri, 12 May 2023 22:01:00 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69501/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_gvI6xjjD" href="/user/16086/" bx-tooltip-user-id="16086">Вадим Никитин</a> написал:<br />ействительно ли перезапуск Квика так сложен, что стоит тратить на этот костыль столько времени? Тем более, что это будет крайне ненадёжное решение. Ведь по сути делается то, что не предусмотрено по дизайну, а это всегда ведёт к Undefined Behaviour. В итоге можно потратить ещё больше времени на отладку костыля, вместо того, чтобы разрабатывать торговую стратегию.<br />=============<br />Перезапуск как таковой не сложен. А вот время он занимает прилично, и это утомляет. Когда увидел косяк, надо быстро исправить код DLL, скомпилять(это быстро) и потом перезаписать двоичный файл. Вот и ждёшь пока он заново загрузится. При загрузке даже не логинюсь для тестов(ну когда без этого можно обойтись), а то ещё дольше будшь ждать. Вообще вся эта процедура загрузки квика долгая, причём ещё надо ввсести логин, пароль, потом я запускаю дебагер для OutputDebugString, а в нём ещё фильтр настроить по номеру процесса. Саму процедуру эту я уже упростил как мог, потому как мне это жутко надоело каждый раз всё это проделывать в описанной последовательности. Я написал прогу на С, которая запускает квик, ждёт появления окна логина/пароля, вводит туда эти данные, нажимает OK, находит сам квик и его PID, запускает дебагер, ищет его окно и вводит туда этот PID и жмёт OK, потм ждёт окна если появится в квике где надо ответить НЕТ на замену инструментов. И после этого остаётся только дождаться когла сам квик загрузится. По сути я только запускаю прогу один раз через ярлык и всё, остальные действия все нужные делает программа. Если бы я ещё и это всё вручную делал, то это вообще кошмар был бы. <br />
			<i>12.05.2023 22:00:02, Alexander.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69501/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69501/topic4425/</guid>
			<pubDate>Fri, 12 May 2023 22:00:02 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69500/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_ueAcq9yw" href="/user/16086/" bx-tooltip-user-id="16086">Вадим Никитин</a> написал:<br />Да, есть.GetModuleHandle<br />=============<br />Ну да точно. Я свои ранние варианты посмотрел, так оказывается я использовал уже эту функцию, правда не в целях выгрузки, потом закомментировал и забыл, ну а потом затупил что-то совсем, что и не вспомнил.))) <br />
			<i>12.05.2023 21:42:05, Alexander.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69500/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69500/topic4425/</guid>
			<pubDate>Fri, 12 May 2023 21:42:05 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69491/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_q348p0g8" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, поддерживаю, очень хорошая книга.<br /><br /><a class="blog-p-user-name" id="bp_zGXD7gaR" href="/user/15768/" bx-tooltip-user-id="15768">Alexander</a>, а какой версии вы используете QUIK и Lua к нему? <br />
			<i>12.05.2023 10:31:10, Вадим Никитин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69491/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69491/topic4425/</guid>
			<pubDate>Fri, 12 May 2023 10:31:10 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69487/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_luWb2dOf" href="/user/16086/" bx-tooltip-user-id="16086">Вадим Никитин</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> написал:<br /> &nbsp;<br />====quote====<br /> <noindex><a href="/user/16086/" target="_blank" rel="nofollow">Вадим Никитин</a></noindex> &nbsp;написал:<br />И ещё.<br /><br />Допустим, сделали библиотеку.<br />Запустили скрипт.<br />Библиотека создала потоки, выделила ресурсы, ещё там чего сделала.<br />Скрипт упал.<br />Всё это добро осталось висеть.<br />Как его удалить - никак.<br /><br />&lt;irony&gt;Конечно, можно сохранить куда-то при создании хэндл каждого ресурса, а после специальной библиотекой вычищать всё это&lt;/irony&gt;<br /><br />Это к чему.<br />Смотрю тему уже месяц обсуждают.<br />Действительно ли перезапуск Квика так сложен, что стоит тратить на этот костыль столько времени? Тем более, что это будет крайне ненадёжное решение. Ведь по сути делается то, что не предусмотрено по дизайну, а это всегда ведёт к Undefined Behaviour. В итоге можно потратить ещё больше времени на отладку костыля, вместо того, чтобы разрабатывать торговую стратегию.<br /><br />В револьвере шесть пуль, а ноги всего две:)<br />=============<br /> &nbsp;Вы немного неправильно рассказали взаимодействие процессов и DLL. <br />Но это не принципиально.<br />-----------------------------<br />Товарищи обсуждают эту тему потому , что учатся писать программы,<br />-------------------------------<br />Так как облаживаю DLL вне QUIK, то нет надобности выгружать dll из QUIK.<br />---------------------------------------<br />Поэтому написал эту функцию из спортивного интереса.<br />У меня на это ушло не более часа, чтобы уточнить некоторые моменты, разобраться и провести тесты,<br />------------------------------<br />Последний вариант не требует включение каких либо функций в выгружаемую библиотеку.<br />---------------------------<br />DLL занимает 39 Кбайт для обращения на C<br /> и 44 Кбайта для обращения на Lua.<br /><br /><br />=============<br /> Да, конечно согласен. Возможно есть неточности. Память человека всё же подвижная материя:)<br /><br />Учиться всегда полезно. Могу порекомендовать прочитать изучающим тему Windows:<br /> &nbsp;Джеффри Рихтер, Кристоф Назар - Windows via C/C++. Программирование на языке Visual C++<br /> &nbsp;Марк Руссинович et al. - Внутреннее устройство Windows<br /> &nbsp;В них достаточно подробно описаны механизмы взаимодействия различных компонентов Windows.<br /><br />Тоже не использую Квик для разработки, разрабатываю в Linux:)<br /><br />Но как-то интересовался этой темой, пришёл к тому же варианту, что вы описали.<br />Также делал, чтобы можно было ликвидировать потоки, которые оставались в случае падежа скрипта.<br />Но для себя счёл всё это недостаточно надёжным поэтому решил, что проще перезапустить Квик в экстренном случае.<br />=============<br />В дополнение к Вашей рекомендации добавлю<br />Джеффри РИХТЕР. Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows<br />--------------------<br />В этой книге можно изучить как взаимодействуют прооцессы с DLL.<br />----------------------------<br />Относительно выгрузки библиотек.<br />Нет смысла отлаживать DLL в КВИКЕ.<br />В квике отлаживают скрипты.<br />--------------------------------<br /><B>Специально сейчас проверил .</B><br /><B>Нет надобности перезагружать КВИК. </B><br /><B>При остановке скрипта dll освобождается и можно ее снова собирать.</B><br />------------------<br />Полагаю, что причина проблемы у автора темы иная. &nbsp; <br />
			<i>12.05.2023 08:44:38, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69487/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69487/topic4425/</guid>
			<pubDate>Fri, 12 May 2023 08:44:38 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69486/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_vvxidbmO" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/16086/" target="_blank" rel="nofollow">Вадим Никитин</a></noindex> написал:<br />И ещё.<br /><br />Допустим, сделали библиотеку.<br />Запустили скрипт.<br />Библиотека создала потоки, выделила ресурсы, ещё там чего сделала.<br />Скрипт упал.<br />Всё это добро осталось висеть.<br />Как его удалить - никак.<br /><br />&lt;irony&gt;Конечно, можно сохранить куда-то при создании хэндл каждого ресурса, а после специальной библиотекой вычищать всё это&lt;/irony&gt;<br /><br />Это к чему.<br />Смотрю тему уже месяц обсуждают.<br />Действительно ли перезапуск Квика так сложен, что стоит тратить на этот костыль столько времени? Тем более, что это будет крайне ненадёжное решение. Ведь по сути делается то, что не предусмотрено по дизайну, а это всегда ведёт к Undefined Behaviour. В итоге можно потратить ещё больше времени на отладку костыля, вместо того, чтобы разрабатывать торговую стратегию.<br /><br />В револьвере шесть пуль, а ноги всего две:)<br />=============<br /> Вы немного неправильно рассказали взаимодействие процессов и DLL. <br />Но это не принципиально.<br />-----------------------------<br />Товарищи обсуждают эту тему потому , что учатся писать программы,<br />-------------------------------<br />Так как облаживаю DLL вне QUIK, то нет надобности выгружать dll из QUIK.<br />---------------------------------------<br />Поэтому написал эту функцию из спортивного интереса.<br />У меня на это ушло не более часа, чтобы уточнить некоторые моменты, разобраться и провести тесты,<br />------------------------------<br />Последний вариант не требует включение каких либо функций в выгружаемую библиотеку.<br />---------------------------<br />DLL занимает 39 Кбайт для обращения на C<br /> и 44 Кбайта для обращения на Lua.<br /><br /><br /> &nbsp;<br />=============<br />Да, конечно согласен. Возможно есть неточности. Память человека всё же подвижная материя:)<br /><br />Учиться всегда полезно. Могу порекомендовать прочитать изучающим тему Windows:<br /><ul><li>Джеффри Рихтер, Кристоф Назар - Windows via C/C++. Программирование на языке Visual C++<br /><li>Марк Руссинович et al. - Внутреннее устройство Windows<br /></ul>В них достаточно подробно описаны механизмы взаимодействия различных компонентов Windows.<br /><br />Тоже не использую Квик для разработки, разрабатываю в Linux:)<br /><br />Но как-то интересовался этой темой, пришёл к тому же варианту, что вы описали.<br />Также делал, чтобы можно было ликвидировать потоки, которые оставались в случае падежа скрипта.<br />Но для себя счёл всё это недостаточно надёжным поэтому решил, что проще перезапустить Квик в экстренном случае. <br />
			<i>12.05.2023 04:22:03, Вадим Никитин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69486/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69486/topic4425/</guid>
			<pubDate>Fri, 12 May 2023 04:22:03 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69475/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_3jbAVGQK" href="/user/16086/" bx-tooltip-user-id="16086">Вадим Никитин</a> написал:<br />И ещё.<br /><br />Допустим, сделали библиотеку.<br />Запустили скрипт.<br />Библиотека создала потоки, выделила ресурсы, ещё там чего сделала.<br />Скрипт упал.<br />Всё это добро осталось висеть.<br />Как его удалить - никак.<br /><br />&lt;irony&gt;Конечно, можно сохранить куда-то при создании хэндл каждого ресурса, а после специальной библиотекой вычищать всё это&lt;/irony&gt;<br /><br />Это к чему.<br />Смотрю тему уже месяц обсуждают.<br />Действительно ли перезапуск Квика так сложен, что стоит тратить на этот костыль столько времени? Тем более, что это будет крайне ненадёжное решение. Ведь по сути делается то, что не предусмотрено по дизайну, а это всегда ведёт к Undefined Behaviour. В итоге можно потратить ещё больше времени на отладку костыля, вместо того, чтобы разрабатывать торговую стратегию.<br /><br />В револьвере шесть пуль, а ноги всего две:)<br />=============<br />Вы немного неправильно рассказали взаимодействие процессов и DLL. <br />Но это не принципиально.<br />-----------------------------<br />Товарищи обсуждают эту тему потому , что учатся писать программы,<br />-------------------------------<br />Так как облаживаю DLL вне QUIK, то нет надобности выгружать dll из QUIK.<br />---------------------------------------<br />Поэтому написал эту функцию из спортивного интереса.<br />У меня на это ушло не более часа, чтобы уточнить некоторые моменты, разобраться и провести тесты,<br />------------------------------<br />Последний вариант не требует включение каких либо функций в выгружаемую библиотеку.<br />---------------------------<br />DLL занимает 39 Кбайт для обращения на C<br /> и 44 Кбайта для обращения на Lua.<br /><br /><br /> &nbsp; <br />
			<i>11.05.2023 19:51:59, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69475/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69475/topic4425/</guid>
			<pubDate>Thu, 11 May 2023 19:51:59 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69465/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			И ещё.<br /><br />Допустим, сделали библиотеку.<br />Запустили скрипт.<br />Библиотека создала потоки, выделила ресурсы, ещё там чего сделала.<br />Скрипт упал.<br />Всё это добро осталось висеть.<br />Как его удалить - никак.<br /><br />&lt;irony&gt;Конечно, можно сохранить куда-то при создании хэндл каждого ресурса, а после специальной библиотекой вычищать всё это&lt;/irony&gt;<br /><br />Это к чему.<br />Смотрю тему уже месяц обсуждают.<br />Действительно ли перезапуск Квика так сложен, что стоит тратить на этот костыль столько времени? Тем более, что это будет крайне ненадёжное решение. Ведь по сути делается то, что не предусмотрено по дизайну, а это всегда ведёт к Undefined Behaviour. В итоге можно потратить ещё больше времени на отладку костыля, вместо того, чтобы разрабатывать торговую стратегию.<br /><br />В револьвере шесть пуль, а ноги всего две:) <br />
			<i>11.05.2023 10:20:00, Вадим Никитин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69465/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69465/topic4425/</guid>
			<pubDate>Thu, 11 May 2023 10:20:00 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69464/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br />Здесь мне кажется не совсем верно написали.<br />=============<br />Не то что бы неверно. Скорее неполно:)<br /><br />Когда запускаете программу, а она юзает ДЛЛ, то ОС создаёт маппинг в памяти на файл этой ДЛЛ, файл становится защищённым от манипуляций.<br /><br />После для каждого процесса, который эту самую ДЛЛ пользует, ОС делает отображение сегментов кода и констант, ну и ещё там чего надо, в адресное пространство этого процесса.<br /><br />То бишь,<br /><ul><li>маппинг на файл в памяти - один для всех<br /><li>код, константы, всё что не изменяется - общие для всех<br /><li>данные, глобальные переменные, всё что изменяется - для каждого процесса свои<br /><li>данные, глобальные переменные, всё что изменяется - для всех потоков в одном процессе общие<br /></ul>Там по сути два счётчика - общий для файла и ещё свой для каждого процесса.<br /><br />Когда запускается процесс, увеличивается <I>счётчик файла</I>, а когда процесс завершается, то <I>счётчик файла</I> уменьшается. Когда этот счётчик обнуляется, то маппинг удаляется, и файл освобождается для всяких манипуляций.<br /><br />Когда вы делаете LoadLibrary увеличивается <I>счётчик процесса</I>, а когда FreeLibrary уменьшается <I>счётчик процесса</I>. Когда этот счётчик обнуляется, то удаляется отображение в адресное пространство только этого процесса. Маппинг на файл остаётся в памяти. Но если это последний процесс, который использовал эту ДЛЛ, то тогда и маппинг из памяти тоже должен удалиться.<br /><br />Так, что то, что вам советует nikolz, должно работать. Я некогда проводил такие тесты, и могу это подтвердить. По сути вы вызываете GetModuleHandle(имя библиотеки), он возвращает хэндл, а после передаёте этот хэндл во FreeLibrary. Если это единственный процесс, что использует библиотеку, то она должна освободиться. <br />
			<i>11.05.2023 10:09:37, Вадим Никитин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69464/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69464/topic4425/</guid>
			<pubDate>Thu, 11 May 2023 10:09:37 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69462/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_WlF9tCJ2" href="/user/15768/" bx-tooltip-user-id="15768">Alexander</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/16086/" target="_blank" rel="nofollow">Вадим Никитин</a></noindex> написал:<br />Безусловно, можно выгрузить библиотеку и принудительно. Для этого можно найти HANDLE библиотеки по её имени, что-то вроде GetModuleHandle и вызвать FreeLibrary с ним.<br />=============<br /> Есть такая функция, которая по имени выдаёт хэндл для библиотеки?<br />=============<br /><br />Да, есть.<br /><br /><B>GetModuleHandle</B><br /><br /><noindex><a href="https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulehandlea" target="_blank" rel="nofollow">https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulehandlea</a></noindex><br /><br />Но здесь же указано, что плохо вызывать потом FreeLibrary. <br />
			<i>11.05.2023 08:20:10, Вадим Никитин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69462/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69462/topic4425/</guid>
			<pubDate>Thu, 11 May 2023 08:20:10 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69461/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Сделал функцию выгрузки DLL c вызовом на С.<br />---------------------------<br />Можно с помощью API C for Lua сделать обертку для любой версии Lua<br />-----------------------<br />Есть вариант для Lua5.3 &nbsp;ничего писать на Си не надо.<br />--------------------------------------<br />Кому надо, стучите в личку. <br />
			<i>11.05.2023 07:34:25, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69461/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69461/topic4425/</guid>
			<pubDate>Thu, 11 May 2023 07:34:25 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69459/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_zNXq7kuu" href="/user/15768/" bx-tooltip-user-id="15768">Alexander</a> написал:<br />Тут что-то другое, DLL выгружается, а файл почему-то не закрыт, я такие выводы делаю, хотя я сам этот файл вообще не трогаю, ну в смысле не открываю его.<br />=============<br />-На момент выгрузки все счётчики нулевые?<br />-Дебагер, в списке загруженных модулей показывает либу <br />
			<i>11.05.2023 04:18:13, Kalmar.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69459/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69459/topic4425/</guid>
			<pubDate>Thu, 11 May 2023 04:18:13 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Выгрузка библиотек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message69451/topic4425/">Выгрузка библиотек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_1GCEp1UV" href="/user/1103/" bx-tooltip-user-id="1103">Kalmar</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/15768/" target="_blank" rel="nofollow">Alexander</a></noindex> написал:<br />FreeLibrary ошибок не выдаёт, скрипт заканчивается, более DLL никто не использует, все ресурсы освобождены, но вот файл библиотеки я удалить так и не могу. Что в обёртке, что в самовыгрузке, - тоже писал ранее - результат один и тот же. Выгрузка без ошибок, файл не удаляется.<br />=============<br /> Ну значит что-то идет не так. Чудес же не бывает. ))<br /><br />Можно попробовать подебажить ситуацию так: завести две глобальных переменных g_procs, g_threads, и <br />- на каждый DLL_PROCESS_ATTACH делать g_procs++<br />- на каждый &nbsp;DLL_PROCESS_DETACH делать g_procs--<br />- на каждый &nbsp; DLL_THREAD_ATTACH делать &nbsp;g_threads++<br />- на каждый &nbsp; DLL_THREAD_DETACH делать &nbsp;g_threads--и потом посмотреть статистику.<br />=============<br />У меня debug есть, весь идёт не только по количеству, но и по всем идентификаторам. Все мои потоки успешно все завершены, да идут время от времени вызовы подключений и отключений других не моих потоков, может квика, может Lua, не знаю, но они сто процентов мою DLL не загружают же через LoadLibrary, так как они вообще не знают что такая есть, это просто так ОС работает, для всех потоков код прогоняет перед их запуском из DLL в их контексте. Я даже 1 поток загружаю или выгружаю, а не, даже вообще не запускаю потоков ни одного и всё равно результат - файл не удалить. Тут что-то другое, DLL выгружается, а файл почему-то не закрыт, я такие выводы делаю, хотя я сам этот файл вообще не трогаю, ну в смысле не открываю его. <br />
			<i>10.05.2023 17:10:09, Alexander.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message69451/topic4425/</link>
			<guid>http://forum.quik.ru/messages/forum10/message69451/topic4425/</guid>
			<pubDate>Wed, 10 May 2023 17:10:09 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
