<?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>Mon, 11 May 2026 01:37:53 +0300</pubDate>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message52304/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_gYG2N0dS" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a>, здравствуйте.<br /><br />Описанная в данном инциденте ошибка была исправлена в версии 8.12.0 терминала QUIK. Рекомендуем вам обновить версию программы. <br /><br />Приносим извинения за причиненные неудобства. <br />
			<i>29.01.2021 08:10:59, Evgeniy Karnaukhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message52304/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message52304/topic5829/</guid>
			<pubDate>Fri, 29 Jan 2021 08:10:59 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51483/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте, <a class="blog-p-user-name" id="bp_jlFXOBy4" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a>.<br /><br />Действительно сейчас работа SEH исключений некорректна. Мы исправим её в очередном обновлении ПО. Спасибо за информацию.<br />Приносим извинения за причиненные неудобства. <br />
			<i>31.12.2020 14:59:40, Andrey Bezrukov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51483/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51483/topic5829/</guid>
			<pubDate>Thu, 31 Dec 2020 14:59:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51195/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_F2kng3pv" href="/user/13952/" bx-tooltip-user-id="13952">TGB</a> написал:<br />можно бы было как то использовать и его исходники<br />=============<br />Они уже присутствуют в 8.11 в несколько модифицированном виде, только не работают, то ли не включили асинхронные исключения при компиляции, то ли замодифицировали до смерти. <br />
			<i>18.12.2020 23:54:06, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51195/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51195/topic5829/</guid>
			<pubDate>Fri, 18 Dec 2020 23:54:06 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51186/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_VXTJK8ry" href="/user/14250/" bx-tooltip-user-id="14250">Roman Azarov</a> написал:<br /> Anton , Благодарим за дополнительную информацию.<br />=============<br /><br /> &nbsp;Мне, кажется, что Anton, действительно, сделал большую и качественную работу по улучшению обработки исключений в QLua. Наверное, можно бы было как то использовать и его исходники по обработке исключений, с каким-то реальным вознаграждением. Почему бы нет? <br />
			<i>18.12.2020 14:17:55, TGB.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51186/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51186/topic5829/</guid>
			<pubDate>Fri, 18 Dec 2020 14:17:55 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51182/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_QvXVkE3r" href="/user/14250/" bx-tooltip-user-id="14250">Roman Azarov</a> написал:<br /> предоставьте, пожалуйста, скрипт, на котором она воспроизводится <br />=============<br />Сейчас я могу предоставить кое-что получше. <noindex><a href="https://dropmefiles.com/FpkPC" target="_blank" rel="nofollow">Вот здесь</a></noindex> архив с тем же скриптом и - новое - (весьма приблизительной) копией вашей lua53.dll, собранной из обычного луа 5.3.5 и палок. Распаковать все в папку рабочего места с заменой оригинальной lua53.dll, запустить скрипт. Через секунду скрипт выбросит ACCESS VIOLATION - смотрите, как исключение будет обработано, - точно так же, как любая другая ошибка луа, без повреждения состояния квика, без деактивации кнопки &quot;запустить&quot; и прочих прелестей. Сравните с поведением оригинальной lua53.dll. Вот что ожидалось увидеть после добавления приведенного выше кода, но что-то пошло не так. <br />
			<i>18.12.2020 12:41:33, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51182/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51182/topic5829/</guid>
			<pubDate>Fri, 18 Dec 2020 12:41:33 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51159/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_F21TCP4Q" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a>, <br /><br />Благодарим за дополнительную информацию. <br />
			<i>17.12.2020 15:11:58, Roman Azarov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51159/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51159/topic5829/</guid>
			<pubDate>Thu, 17 Dec 2020 15:11:58 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51157/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_ToxSYhJa" href="/user/14250/" bx-tooltip-user-id="14250">Roman Azarov</a> написал:<br />Будем разбираться.<br />=============<br />Уже выкладывал <noindex><a href="https://dropmefiles.com/CTexQ" target="_blank" rel="nofollow">скрипт + длл для выбрасывания исключений</a></noindex> в колбеках, может облегчат работу. Удобнее всего в OnStop бросать, при запущенном скрипте ставим брейкпойнты перед и после LUAI_TRY, жмем остановить, убеждаемся, что на брейкпойнте ДО остановились, жмем продолжить и по идее должны остановиться на брейкпойнте ПОСЛЕ, а по факту улетаем в qlua.dll. У меня, к сожалению, сорцев и символов нет, наглядно на скринах показать не получится. <br />
			<i>17.12.2020 14:35:55, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51157/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51157/topic5829/</guid>
			<pubDate>Thu, 17 Dec 2020 14:35:55 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51155/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_lbDVBGd8" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a>, <br /><br />Будем разбираться. Постараемся в ближайшее время дать ответ по данному вопросу. <br />
			<i>17.12.2020 14:12:40, Roman Azarov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51155/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51155/topic5829/</guid>
			<pubDate>Thu, 17 Dec 2020 14:12:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51146/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_nemrwQQd" href="/user/14250/" bx-tooltip-user-id="14250">Roman Azarov</a> написал:<br />в чем именно заключается проблема?<br />=============<br />У меня - ни в чем, я как бы предложил некое улучшение, его как бы реализовали, мои тесты показали, что оно никогда не сработает в текущем виде почему-то. Как брейкпойнт поставить я думаю в арке все знают, куда поставить написано выше. Тут вопрос надо ли оно кому-то. Ежли нет, так мне меньше всех. <br />
			<i>17.12.2020 11:36:08, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51146/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51146/topic5829/</guid>
			<pubDate>Thu, 17 Dec 2020 11:36:08 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51142/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_PTZfFhV7" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a>, здравствуйте!<br /><br />Уточните пожалуйста, в чем именно заключается проблема?<br />При ее наличии, предоставьте, пожалуйста, скрипт, на котором она воспроизводится или же другие данные, наглядно ее демонстрирующие (прим. снимки экрана). <br />
			<i>17.12.2020 10:56:01, Roman Azarov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51142/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51142/topic5829/</guid>
			<pubDate>Thu, 17 Dec 2020 10:56:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51106/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_dN7CMD5b" href="/user/13858/" bx-tooltip-user-id="13858">Evgeniy Karnaukhov</a> написал:<br />Рекомендуем вам обновить версию программы.<br />=============<br />Уже обновил и даже попробовал. Код с транслятором в lua53.dll увидел (и в lua54.dll тоже), а вот работающим его не увидел. Предполагаю потому, что lua53.dll собрали без флага /EHa, других объяснений не могу придумать. Транслятор перед вызовом колбека ставится, но при исключении в колбеке оно улетает по-прежнему в qlua.dll и ловится уже там, то есть по-прежнему весь хвост в luaD_rawrunprotected и выше не выполняется. Чтобы это увидеть, достаточно поставить брейкпойнт в luaD_rawrunprotected сразу после блока LUAI_TRY и бросить из колбека access violation или что-то подобное. Если исключение поймано, квик встанет на брейкпойнте, но этого не происходит, ближайшее место, где удалось его остановить, это транслятор в qlua.dll, то есть где и раньше. <br />
			<i>16.12.2020 15:08:28, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51106/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51106/topic5829/</guid>
			<pubDate>Wed, 16 Dec 2020 15:08:28 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51089/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_mSWazLBl" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a> написал:<br />В паре веток понаписал свое фи по поводу обработки исключений в qlua.dll, как она мне представилась через окошко отладчика. Напомню вкратце, вокруг lua_pcallk, через которую qlua вызывает пользовательские колбеки, построен try-catch блок и перед вызовом lua_pcallk устанавливается SEH-транслятор (превращающий SEH-исключения в плюсовые). Проблема в том, что исключение (плюсовое или транслированное), пролетая мимо lua_pcallk, пропускает всю его обработку после ошибки и, таким образом, стейт после этого уже нежизнеспособен. В арке последнее понимают и в случае ошибки, пролетевшей мимо lua_pcallk, тут же прибивают скрипт.<br /><br />Сказавши А, хочу добавить и Б, а именно, как можно все это покрасивее организовать. Очевидно, ловить и транслировать исключения надо не в qlua.dll (там уже поздно), а в lua53.dll. Это не значит, что надо переделывать луа, его надо просто кастомизировать имеющимися в нем средствами, а именно через luaconf.h. Хочу показать, как я это сделал у себя и предложить арке посмотреть, не лучше ли будет так.<br /><br /> &nbsp; &nbsp; Скрытый текст &nbsp; &nbsp; &nbsp; Идея простая, мы кастомизируем LUAI_TRY, что предусмотрено разработчиками луа, добавляя туда SEH-транслятор и ловушку исключений известного нам типа, а луа-ошибки (тоже исключения типа, известного только луа) оставляем как есть. Пойманные &quot;свои&quot; ошибки мы превращаем в луа-ошибки, так что lua_pcallk их поймает как родных и вся обработка на стороне qlua.dll сведется к получению обычной луа-ошибки с луа-стека и выводу сообщения (ну а в мейне еще и прибитию скрипта, раз уж так принято). Реализация достаточно простая и не требует вмешательства в код луа, кроме предназначенного как раз для этого luaconf.h.<br /><br />В конце luaconf.h имеется секция для наших хотелок, вот так она выглядит у меня (не относящееся к делу убрал):<br /> 
====code====
<pre>&nbsp;&nbsp;/ *&nbsp;&nbsp; =&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; * /

/ * 
 *&nbsp;&nbsp;*&nbsp;&nbsp; Local&nbsp;&nbsp;configuration. You can use this space to add your redefinitions
 *&nbsp;&nbsp;*&nbsp;&nbsp;without modifying the main part of the file.
 * /


/ *&nbsp;&nbsp; =&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; * /
/ *&nbsp;&nbsp;SEH&nbsp;&nbsp;and&nbsp;&nbsp;C +&nbsp;&nbsp;+&nbsp;&nbsp;exceptions should be converted to lua errors
/ *&nbsp;&nbsp; =&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; * /

struct luasehtrans
{

&nbsp;&nbsp; luasehtrans() throw();
&nbsp;&nbsp; ~luasehtrans();
&nbsp;&nbsp; static void onex(void&nbsp;&nbsp;*&nbsp;&nbsp;s) throw();

private:

&nbsp;&nbsp; // disallow copy/move
&nbsp;&nbsp; luasehtrans(const luasehtrans&nbsp;&nbsp;&#38; );
&nbsp;&nbsp; luasehtrans(luasehtrans&nbsp;&nbsp;&#38;&nbsp;&nbsp;&#38; );
&nbsp;&nbsp; luasehtrans&nbsp;&nbsp;&#38;&nbsp;&nbsp;operator = (const luasehtrans&nbsp;&nbsp;&#38; );
&nbsp;&nbsp; luasehtrans&nbsp;&nbsp;&#38;&nbsp;&nbsp;operator = (luasehtrans&nbsp;&nbsp;&#38;&nbsp;&nbsp;&#38; );

&nbsp;&nbsp; void&nbsp;&nbsp;*&nbsp;&nbsp;_bkp;

};

 # define LUAI_THROW(L,c) throw (c)

 # define LUAI_TRY(L,c,a) &#92;
&nbsp;&nbsp; try { ::luasehtrans st; a } &#92;
&nbsp;&nbsp; catch( .. .) {&nbsp;&nbsp;if&nbsp;&nbsp;((c) -&nbsp;&nbsp;&#62; status&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; 0 ) { ::luasehtrans::onex(L); (c) -&nbsp;&nbsp;&#62; status&nbsp;&nbsp;=&nbsp;&nbsp; -&nbsp;&nbsp;1 ; } }

 # define luai_jmpbuf int
&nbsp;&nbsp;</pre>
=============
 Также добавлен файл с реализацией класса luasehtrans:<br /> 
====code====
<pre>&nbsp;&nbsp; # include&nbsp;&nbsp;"luaconf.h" 
 # include&nbsp;&nbsp;"lua.h" 
 # include&nbsp;&nbsp;"lobject.h" 
 # include&nbsp;&nbsp;&#60; string &#62; 
 # include&nbsp;&nbsp;&#60; stdexcept &#62; 
 # include&nbsp;&nbsp;&#60; eh.h &#62; 
 # include&nbsp;&nbsp;&#60; windows.h &#62; 

struct sehex
{

&nbsp;&nbsp; sehex(struct _EXCEPTION_POINTERS&nbsp;&nbsp;*&nbsp;&nbsp;pep) throw();
&nbsp;&nbsp; const std::string&nbsp;&nbsp;&#38;&nbsp;&nbsp;str(void) const throw();

private:

&nbsp;&nbsp; std::string _str;

};

static const char&nbsp;&nbsp;*&nbsp;&nbsp;ecstr(DWORD ec) throw()
{
&nbsp;&nbsp; switch(ec)
&nbsp;&nbsp; {
&nbsp;&nbsp; case EXCEPTION_ACCESS_VIOLATION:&nbsp;&nbsp;return&nbsp;&nbsp; "ACCESS VIOLATION" ;
&nbsp;&nbsp; case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:&nbsp;&nbsp;return&nbsp;&nbsp; "ARRAY BOUNDS EXCEEDED" ;
&nbsp;&nbsp; case EXCEPTION_BREAKPOINT:&nbsp;&nbsp;return&nbsp;&nbsp; "DEBUG BREAKPOINT" ;
&nbsp;&nbsp; case EXCEPTION_DATATYPE_MISALIGNMENT:&nbsp;&nbsp;return&nbsp;&nbsp; "MISALIGNMENT" ;
&nbsp;&nbsp; case EXCEPTION_FLT_DENORMAL_OPERAND:&nbsp;&nbsp;return&nbsp;&nbsp; "FPU DENORMAL OPERAND" ;
&nbsp;&nbsp; case EXCEPTION_FLT_DIVIDE_BY_ZERO:&nbsp;&nbsp;return&nbsp;&nbsp; "FPU DIVISION BY ZERO" ;
&nbsp;&nbsp; case EXCEPTION_FLT_INEXACT_RESULT:&nbsp;&nbsp;return&nbsp;&nbsp; "FPU INEXACT RESULT" ;
&nbsp;&nbsp; case EXCEPTION_FLT_INVALID_OPERATION:&nbsp;&nbsp;return&nbsp;&nbsp; "FPU GENERIC EXCEPTION" ;
&nbsp;&nbsp; case EXCEPTION_FLT_OVERFLOW:&nbsp;&nbsp;return&nbsp;&nbsp; "FPU OVERFLOW" ;
&nbsp;&nbsp; case EXCEPTION_FLT_STACK_CHECK:&nbsp;&nbsp;return&nbsp;&nbsp; "FPU STACK OVERFLOW" ;
&nbsp;&nbsp; case EXCEPTION_FLT_UNDERFLOW:&nbsp;&nbsp;return&nbsp;&nbsp; "FPU UNDERFLOW" ;
&nbsp;&nbsp; case EXCEPTION_ILLEGAL_INSTRUCTION:&nbsp;&nbsp;return&nbsp;&nbsp; "ILLEGAL INSTRUCTION" ;
&nbsp;&nbsp; case EXCEPTION_IN_PAGE_ERROR:&nbsp;&nbsp;return&nbsp;&nbsp; "PAGE ERROR" ;
&nbsp;&nbsp; case EXCEPTION_INT_DIVIDE_BY_ZERO:&nbsp;&nbsp;return&nbsp;&nbsp; "DIVISION BY ZERO" ;
&nbsp;&nbsp; case EXCEPTION_INT_OVERFLOW:&nbsp;&nbsp;return&nbsp;&nbsp; "INTEGRAL OVERFLOW" ;
&nbsp;&nbsp; case EXCEPTION_INVALID_DISPOSITION:&nbsp;&nbsp;return&nbsp;&nbsp; "INVALID DISPOSITION" ;
&nbsp;&nbsp; case EXCEPTION_NONCONTINUABLE_EXCEPTION:&nbsp;&nbsp;return&nbsp;&nbsp; "NONCONTINUABLE EXCEPTION" ;
&nbsp;&nbsp; case EXCEPTION_PRIV_INSTRUCTION:&nbsp;&nbsp;return&nbsp;&nbsp; "PRIVILEGED INSTRUCTION" ;
&nbsp;&nbsp; case EXCEPTION_SINGLE_STEP:&nbsp;&nbsp;return&nbsp;&nbsp; "DEBUG STEP" ;
&nbsp;&nbsp; case EXCEPTION_STACK_OVERFLOW:&nbsp;&nbsp;return&nbsp;&nbsp; "STACK OVERFLOW" ;
&nbsp;&nbsp; default:&nbsp;&nbsp;return&nbsp;&nbsp; "UNKNOWN EXCEPTION" ;
&nbsp;&nbsp; }
}

sehex::sehex(struct _EXCEPTION_POINTERS&nbsp;&nbsp;*&nbsp;&nbsp;pep) throw()
{
&nbsp;&nbsp; static const char fmt&#91;&#93;&nbsp;&nbsp;=&nbsp;&nbsp; "%s at address %p" ;
&nbsp;&nbsp; try
&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::PEXCEPTION_RECORD per&nbsp;&nbsp;=&nbsp;&nbsp;pep -&nbsp;&nbsp;&#62; ExceptionRecord;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (per)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char&nbsp;&nbsp;*&nbsp;&nbsp;pen&nbsp;&nbsp;=&nbsp;&nbsp;ecstr(per -&nbsp;&nbsp;&#62; ExceptionCode);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int len&nbsp;&nbsp;=&nbsp;&nbsp;_scprintf(fmt, pen, per -&nbsp;&nbsp;&#62; ExceptionAddress);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (len +&nbsp;&nbsp;+&nbsp;&nbsp; &#62;&nbsp;&nbsp; 0 )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;*&nbsp;&nbsp;pbuf&nbsp;&nbsp;=&nbsp;&nbsp;static_cast &#60; char&nbsp;&nbsp;*&nbsp;&nbsp;&#62; (_alloca(len));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (pbuf)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sprintf_s(pbuf, len, fmt, pen, per -&nbsp;&nbsp;&#62; ExceptionAddress);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_str.assign (pbuf, len&nbsp;&nbsp;-&nbsp;&nbsp; 1 );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp; }
&nbsp;&nbsp; catch( .. .)
&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// we shouldn't show to the user a garbage string
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _str.clear ();
&nbsp;&nbsp; }
}

const std::string&nbsp;&nbsp;&#38;&nbsp;&nbsp;sehex::str(void) const throw()
{
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;_str;
}

static void translator(unsigned int, struct _EXCEPTION_POINTERS&nbsp;&nbsp;*&nbsp;&nbsp;pep)
{
&nbsp;&nbsp; throw sehex(pep);
}

luasehtrans::luasehtrans() throw()
&nbsp;&nbsp; : _bkp(_set_se_translator(::translator))
{
}

luasehtrans::~luasehtrans()
{
&nbsp;&nbsp; _set_se_translator(static_cast &#60; _se_translator_function &#62; (_bkp));
}

void luasehtrans::onex(void&nbsp;&nbsp;*&nbsp;&nbsp;vs) throw()
{
&nbsp;&nbsp; try
&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lua_State&nbsp;&nbsp;*&nbsp;&nbsp;s&nbsp;&nbsp;=&nbsp;&nbsp;static_cast &#60; lua_State&nbsp;&nbsp;*&nbsp;&nbsp;&#62; (vs);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::exception_ptr pe(std::current_exception());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( ! (nullptr&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;pe))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::rethrow_exception(pe);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(const sehex&nbsp;&nbsp;&#38;&nbsp;&nbsp;e)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;luaO_pushfstring(s,&nbsp;&nbsp;"%s" ,&nbsp;&nbsp;e.str ().c_str());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(const std::exception&nbsp;&nbsp;&#38;&nbsp;&nbsp;e)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;luaO_pushfstring(s,&nbsp;&nbsp;"%s" ,&nbsp;&nbsp;e.what ());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch( .. .)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;luaO_pushfstring(s,&nbsp;&nbsp;"unrecognized exception" );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp; }
&nbsp;&nbsp; catch( .. .)
&nbsp;&nbsp; {
&nbsp;&nbsp; }
}
&nbsp;&nbsp;</pre>
=============
 Тксть вот и все, а ты боялась. Теперь lua_pcallk ловит и плюсовые, и SEH, и свои луа ошибки и выдает их на-гора единым принятым в луа способом, со строкой-описанием на вершине луа-стека.<br />=============<br />Добрый день,<br /><br />Описанная в данном инциденте ошибка была исправлена в версии 8.11.0 терминала QUIK.<br />Рекомендуем вам обновить версию программы.<br /><br />Приносим извинения за причиненные неудобства. <br />
			<i>16.12.2020 09:53:33, Evgeniy Karnaukhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51089/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51089/topic5829/</guid>
			<pubDate>Wed, 16 Dec 2020 09:53:33 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50448/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_6DzBjZU4" href="/user/82/" bx-tooltip-user-id="82">swerg</a>, Я не помню, какие там две последние цифры, но ругается и на goto и на метки - проверено вчера. Сам Квик был скачан с сайта ВТБ тоже буквально на днях - я скачивал намного раньше, но раза два или три потом обновлял.<br /><br /><a class="blog-p-user-name" id="bp_UXt1FYUo" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a>, Не знаю, но Ваше мнение для меня не менее интересно, чем мнение сотрудников арки. <br />
			<i>19.11.2020 15:58:54, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50448/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50448/topic5829/</guid>
			<pubDate>Thu, 19 Nov 2020 15:58:54 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50446/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_dEyA6AD4" href="/user/14299/" bx-tooltip-user-id="14299">Владимир</a>, непонятно только, почему эти <I>пожелания по развитию квика</I> ко мне обращены, я в арке не работаю (и в спортлото тоже). <br />
			<i>19.11.2020 15:04:51, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50446/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50446/topic5829/</guid>
			<pubDate>Thu, 19 Nov 2020 15:04:51 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50444/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В 8.6 goto работает, проверено. <br />
			<i>19.11.2020 14:37:57, swerg.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50444/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50444/topic5829/</guid>
			<pubDate>Thu, 19 Nov 2020 14:37:57 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50443/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_30O75zuX" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a>, По моему разумению, неплохо бы сделать так:<br /><br />1. Юзер формирует таблицу текущих торгов, включая туда те инструменты, по которым ему интересны обновления (это даже не дело скрипта - это настройка Квика). Если юзер намерен и сам торговать (как я, например), эта таблица должна быть видимой (у меня она &quot;едина в трёх лицах&quot;: а) акции, торгующиеся на рубли, б) на доллары и в) на евро), в противном случае может лежать в свёрнутом виде на какой-нибудь ненужной вкладке - тогда она выполняет роль инструкции Квику обновлять данные по этому набору инструментов, чтобы скрипт всегда имел по ним актуальные данные.<br /><br />2. Юзеру вообще не дозволяется иметь дело ни с чем, кроме терминала Квика - не его это собачье дело заниматься обменом с сервером. Тогда вся математика резко упрощается, и огромный пласт потенциальных ошибок просто исчезает как класс.<br /><br />3. Квик сам обрабатывает все прерывания, а юзеровские &quot;коллбеки&quot; обслуживает в фоновом режиме как если бы они находились в потоке мейна. Таковых (у меня) всего лишь 4 штуки: OnStop, OnTimer, OnTrade, да OnOrder, и я (пока) не вижу смысла в остальных (ну, кроме обработки событий от юзера в моих таблицах).<br /><br />Сложность - минимальная, скорость - максимальная, надёжность - максимальная. Ну сказка же, господа!<br /><br />P.S. У меня два Квика для разных брокеров, у одного версия 8.7.1.3. у другого 8.10.1.1, на обоих мой скрипт прекрасно работает. А вот вчера зашёл к другу моему - не работает (у него версия 8.6 и ещё что-то там). Начал разбираться - оказывается, он ругается на goto и на метки (я всё-таки пристроил этот кастрированный goto для эмуляции украденного из языка continue). Ну это совсем уж свинство, господа! Язык, конечно, дерьмо, но соответствовать описанию он всё же должен! Версии плодятся, как тараканы - так почему бы не сделать одну, но нормальную? <br />
			<i>19.11.2020 13:31:12, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50443/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50443/topic5829/</guid>
			<pubDate>Thu, 19 Nov 2020 13:31:12 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50434/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_XYzxlaeS" href="/user/629/" bx-tooltip-user-id="629">Latrop</a> написал:<br />Где бы пока раздобыть инфу, как пользовать PLUGIN_InitEx, нет такой, случаем? :)<br />=============<br />Неа, и не смотрел в эту сторону, бо незачем. <br />
			<i>19.11.2020 09:41:14, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50434/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50434/topic5829/</guid>
			<pubDate>Thu, 19 Nov 2020 09:41:14 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50433/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_WFXZjYlD" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a> написал:<br />может когда-нибудь и до этого доберутся<br />=============<br />Может и нет.<br /><br />Где бы пока раздобыть инфу, как пользовать PLUGIN_InitEx, нет такой, случаем? :) <br />
			<i>19.11.2020 08:26:29, Latrop.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50433/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50433/topic5829/</guid>
			<pubDate>Thu, 19 Nov 2020 08:26:29 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50428/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_rOayjejx" href="/user/629/" bx-tooltip-user-id="629">Latrop</a> написал:<br />относительно много тратится квиком на перекладывание примитивов с стек луа.<br />=============<br />Думаю, причина в синхронизации, каждый вызов lua_push*, lua_set* захватывает-выпускает лок, на большой таблице сотня туда-сюда вполне может произойти. Есть куда улучшить. Сколько-то будет выиграно, когда выпилят рудименты 5.1, сколько-то можно выиграть, захватывая явно лок перед заполнением таблицы (но выпуская перед вызовом колбека). Либо можно было бы создать один стейт без синхронизации на весь квик, заполнять табличку в нем и потом lua_xmove ее в стейт скрипта. В моменте, очевидно, более животрепещущие есть задачи, может когда-нибудь и до этого доберутся. <br />
			<i>19.11.2020 02:46:31, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50428/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50428/topic5829/</guid>
			<pubDate>Thu, 19 Nov 2020 02:46:31 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50426/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_53mWk7gj" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a> написал:<br />Там никаких потоков и нет, поток для мейна любезно qlua.dll нам создает. То есть будет один поток квика, что достигается и в луа, если в мейне ничего не делать, окромя периодической проверки флага выхода. Немножко синхронизации и заполнения (да, иногда ненужных) луа-табличек погоды не делают, там счет на сотни наносекунд на круг. По одной ягодки сам квик вытаскивает из очереди своей и тут же незамедлительно колбек и дергает, если он определен, и, как тысячу раз нам говорили, никогда, НИКОГДА воробьянинов не протягивал руки он не будет ничего откладывать и пересортировывать. Что действительно очень правильно и хорошо. <br />=============<br />Это понятно. У меня итак есть QLuaNet.dll , которая просто ловит данные и раздает их в своих потоках, и квик не тормозит и мейн там не нужен, месяцами работает не выключаясь.<br />Хоть итак все шустро и стабильно, но просто профилирование показало, что относительно много тратится квиком на перекладывание примитивов с стек луа.<br />Моя система по TCP тики и прочие данные передает быстрее, чем квик с луа стеком взаимодействует.<br />А когда несколько брокеров и на каждом брокере по несколько квиков, то возникает мысль может это дело еще можно ускорить. <br />
			<i>18.11.2020 23:08:25, Latrop.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50426/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50426/topic5829/</guid>
			<pubDate>Wed, 18 Nov 2020 23:08:25 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50425/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_J4gkMfDQ" href="/user/82/" bx-tooltip-user-id="82">swerg</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/629/" target="_blank" rel="nofollow">Latrop</a></noindex> написал:<br />квику эта участь похоже не грозит. В России это называется - адаптация. Что явно разрешено даже по закону, если<br />=============<br /> <br />Всегда обожал слушать адептов &quot;цивилизованного рынка&quot;, которые уже в во втором предложении пишут &quot;но воровать можно, если не поймают&quot;.<br />=============<br />Не ну зачем так? Обожать слушать это может и хорошо, но еще лучше и читать, читать законы. Кто говорит про воровать?<br />Наше законодательство в этой части, кстати, довольно таки либеральное.<br />Хоть в eula квика (и любой другой программы) может быть и прописан запрет на декомпиляцию, но, вы удивитесь, закон явно разрешает проводить декомпиляцию в целях изучения и реализации взаимодействия с другой программой пользователя. Поэтому на эту часть eula можно смело смотреть (и не только смотреть) в высокой колокольни.<br />А то, что квик по своим убеждениям не делает доступной информацию по плагинам, так это также дает явное право на декомпиляцию в силу закона.<br /><br />А воруете вы свое время, занимаясь каким-то, простите за сугубо личное мнение, колхозом с этими callback/main/sleep и т.п. <br />
			<i>18.11.2020 22:45:51, Latrop.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50425/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50425/topic5829/</guid>
			<pubDate>Wed, 18 Nov 2020 22:45:51 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50411/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_d2J4nl1E" href="/user/629/" bx-tooltip-user-id="629">Latrop</a> написал:<br />квику эта участь похоже не грозит. В России это называется - адаптация. Что явно разрешено даже по закону, если<br />=============<br /><br />Всегда обожал слушать адептов "цивилизованного рынка", которые уже в во втором предложении пишут "но воровать можно, если не поймают". <br />
			<i>18.11.2020 11:32:01, swerg.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50411/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50411/topic5829/</guid>
			<pubDate>Wed, 18 Nov 2020 11:32:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50405/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_Z5hl3j3W" href="/user/629/" bx-tooltip-user-id="629">Latrop</a> написал:<br />для цивилизованных<br />=============<br />Ага, нам-то чернолапотникам чего стесняться, не мы такие, жизнь такая, все дела.<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_XmM9mNf1" href="/user/629/" bx-tooltip-user-id="629">Latrop</a> написал:<br />только без проблем с потоками<br />=============<br />Там никаких потоков и нет, поток для мейна любезно qlua.dll нам создает. То есть будет один поток квика, что достигается и в луа, если в мейне ничего не делать, окромя периодической проверки флага выхода. Немножко синхронизации и заполнения (да, иногда ненужных) луа-табличек погоды не делают, там счет на сотни наносекунд на круг. По одной ягодки сам квик вытаскивает из очереди своей и тут же незамедлительно колбек и дергает, если он определен, и, как тысячу раз нам говорили, никогда, НИКОГДА <S>воробьянинов не протягивал руки</S> он не будет ничего откладывать и пересортировывать. Что действительно очень правильно и хорошо.<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_pfbYfuw4" href="/user/629/" bx-tooltip-user-id="629">Latrop</a> написал:<br />если это не продавать<br />=============<br />, есть и поинтересней игрушки. <br />
			<i>18.11.2020 11:07:19, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50405/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50405/topic5829/</guid>
			<pubDate>Wed, 18 Nov 2020 11:07:19 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50401/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_cshS47KI" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/629/" target="_blank" rel="nofollow">Latrop</a></noindex> написал:<br />почему вы до сих пор не раскрутили этот qlua.dll и не написали свой плагин qapi.dll<br />=============<br /> Потому что это нарушение eula? Тем более что и смысла нет. Все почему-то думают, что &quot;у квике усе есть, это злая qlua.dll целенаправленно гадит&quot;. Ничего там радикально другого нет, без луа будут ровно те же колбеки дергаться ровно в том же порядке.<br />=============<br />eula - это ж для цивилизованных рынков, квику эта участь похоже не грозит. В России это называется - адаптация. Что явно разрешено даже по закону, если это не продавать.<br />Понятно, что функционал там тот же, только без проблем с потоками и преобразованиями данных. <br />Ягоды, как говорится, всегда ж проще и вкуснее складывать сразу в рот, а не выкладывать их сначала по одной в ряд на жердочку, которая того и гляди опрокинется :) <br />
			<i>18.11.2020 10:25:01, Latrop.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50401/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50401/topic5829/</guid>
			<pubDate>Wed, 18 Nov 2020 10:25:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50395/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_0W7Ca46M" href="/user/629/" bx-tooltip-user-id="629">Latrop</a> написал:<br />почему вы до сих пор не раскрутили этот qlua.dll и не написали свой плагин qapi.dll<br />=============<br />Потому что это нарушение eula? Тем более что и смысла нет. Все почему-то думают, что &quot;у квике усе есть, это злая qlua.dll целенаправленно гадит&quot;. Ничего там радикально другого нет, без луа будут ровно те же колбеки дергаться ровно в том же порядке. <br />
			<i>18.11.2020 08:23:40, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50395/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50395/topic5829/</guid>
			<pubDate>Wed, 18 Nov 2020 08:23:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50394/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_c21R89g2" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a> написал:<br /><noindex><a href="/user/11/" target="_blank" rel="nofollow">Alexey Ivannikov</a></noindex>, &nbsp;спасибо, будем надеяться, стабильности прибавится.<br />=============<br />C такими способностями, как у вас, удивляюсь, почему вы до сих пор не раскрутили этот qlua.dll и не написали свой плагин qapi.dll c api для обработки событий и получения данных, без lua-посредника... <br />
			<i>18.11.2020 06:13:06, Latrop.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50394/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50394/topic5829/</guid>
			<pubDate>Wed, 18 Nov 2020 06:13:06 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50392/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_hAEYfRHb" href="/user/11/" bx-tooltip-user-id="11">Alexey Ivannikov</a>, &nbsp;спасибо, будем надеяться, стабильности прибавится. <br />
			<i>18.11.2020 03:38:03, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50392/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50392/topic5829/</guid>
			<pubDate>Wed, 18 Nov 2020 03:38:03 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message50319/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_2Hc0QRWP" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a> написал:<br />В паре веток понаписал свое фи по поводу обработки исключений в qlua.dll, как она мне представилась через окошко отладчика. Напомню вкратце, вокруг lua_pcallk, через которую qlua вызывает пользовательские колбеки, построен try-catch блок и перед вызовом lua_pcallk устанавливается SEH-транслятор (превращающий SEH-исключения в плюсовые). Проблема в том, что исключение (плюсовое или транслированное), пролетая мимо lua_pcallk, пропускает всю его обработку после ошибки и, таким образом, стейт после этого уже нежизнеспособен. В арке последнее понимают и в случае ошибки, пролетевшей мимо lua_pcallk, тут же прибивают скрипт.<br /><br />Сказавши А, хочу добавить и Б, а именно, как можно все это покрасивее организовать. Очевидно, ловить и транслировать исключения надо не в qlua.dll (там уже поздно), а в lua53.dll. Это не значит, что надо переделывать луа, его надо просто кастомизировать имеющимися в нем средствами, а именно через luaconf.h. Хочу показать, как я это сделал у себя и предложить арке посмотреть, не лучше ли будет так.<br /><br /> &nbsp; &nbsp; Скрытый текст &nbsp; &nbsp; &nbsp; Идея простая, мы кастомизируем LUAI_TRY, что предусмотрено разработчиками луа, добавляя туда SEH-транслятор и ловушку исключений известного нам типа, а луа-ошибки (тоже исключения типа, известного только луа) оставляем как есть. Пойманные &quot;свои&quot; ошибки мы превращаем в луа-ошибки, так что lua_pcallk их поймает как родных и вся обработка на стороне qlua.dll сведется к получению обычной луа-ошибки с луа-стека и выводу сообщения (ну а в мейне еще и прибитию скрипта, раз уж так принято). Реализация достаточно простая и не требует вмешательства в код луа, кроме предназначенного как раз для этого luaconf.h.<br /><br />В конце luaconf.h имеется секция для наших хотелок, вот так она выглядит у меня (не относящееся к делу убрал):<br /> 
====code====
<pre>&nbsp;&nbsp;/ *&nbsp;&nbsp; =&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; * /

/ * 
 *&nbsp;&nbsp;*&nbsp;&nbsp; Local&nbsp;&nbsp;configuration. You can use this space to add your redefinitions
 *&nbsp;&nbsp;*&nbsp;&nbsp;without modifying the main part of the file.
 * /


/ *&nbsp;&nbsp; =&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; * /
/ *&nbsp;&nbsp;SEH&nbsp;&nbsp;and&nbsp;&nbsp;C +&nbsp;&nbsp;+&nbsp;&nbsp;exceptions should be converted to lua errors
/ *&nbsp;&nbsp; =&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; * /

struct luasehtrans
{

&nbsp;&nbsp; luasehtrans() throw();
&nbsp;&nbsp; ~luasehtrans();
&nbsp;&nbsp; static void onex(void&nbsp;&nbsp;*&nbsp;&nbsp;s) throw();

private:

&nbsp;&nbsp; // disallow copy/move
&nbsp;&nbsp; luasehtrans(const luasehtrans&nbsp;&nbsp;&#38; );
&nbsp;&nbsp; luasehtrans(luasehtrans&nbsp;&nbsp;&#38;&nbsp;&nbsp;&#38; );
&nbsp;&nbsp; luasehtrans&nbsp;&nbsp;&#38;&nbsp;&nbsp;operator = (const luasehtrans&nbsp;&nbsp;&#38; );
&nbsp;&nbsp; luasehtrans&nbsp;&nbsp;&#38;&nbsp;&nbsp;operator = (luasehtrans&nbsp;&nbsp;&#38;&nbsp;&nbsp;&#38; );

&nbsp;&nbsp; void&nbsp;&nbsp;*&nbsp;&nbsp;_bkp;

};

 # define LUAI_THROW(L,c) throw (c)

 # define LUAI_TRY(L,c,a) &#92;
&nbsp;&nbsp; try { ::luasehtrans st; a } &#92;
&nbsp;&nbsp; catch( .. .) {&nbsp;&nbsp;if&nbsp;&nbsp;((c) -&nbsp;&nbsp;&#62; status&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; 0 ) { ::luasehtrans::onex(L); (c) -&nbsp;&nbsp;&#62; status&nbsp;&nbsp;=&nbsp;&nbsp; -&nbsp;&nbsp;1 ; } }

 # define luai_jmpbuf int
&nbsp;&nbsp;</pre>
=============
 Также добавлен файл с реализацией класса luasehtrans:<br /> 
====code====
<pre>&nbsp;&nbsp; # include&nbsp;&nbsp;"luaconf.h" 
 # include&nbsp;&nbsp;"lua.h" 
 # include&nbsp;&nbsp;"lobject.h" 
 # include&nbsp;&nbsp;&#60; string &#62; 
 # include&nbsp;&nbsp;&#60; stdexcept &#62; 
 # include&nbsp;&nbsp;&#60; eh.h &#62; 
 # include&nbsp;&nbsp;&#60; windows.h &#62; 

struct sehex
{

&nbsp;&nbsp; sehex(struct _EXCEPTION_POINTERS&nbsp;&nbsp;*&nbsp;&nbsp;pep) throw();
&nbsp;&nbsp; const std::string&nbsp;&nbsp;&#38;&nbsp;&nbsp;str(void) const throw();

private:

&nbsp;&nbsp; std::string _str;

};

static const char&nbsp;&nbsp;*&nbsp;&nbsp;ecstr(DWORD ec) throw()
{
&nbsp;&nbsp; switch(ec)
&nbsp;&nbsp; {
&nbsp;&nbsp; case EXCEPTION_ACCESS_VIOLATION:&nbsp;&nbsp;return&nbsp;&nbsp; "ACCESS VIOLATION" ;
&nbsp;&nbsp; case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:&nbsp;&nbsp;return&nbsp;&nbsp; "ARRAY BOUNDS EXCEEDED" ;
&nbsp;&nbsp; case EXCEPTION_BREAKPOINT:&nbsp;&nbsp;return&nbsp;&nbsp; "DEBUG BREAKPOINT" ;
&nbsp;&nbsp; case EXCEPTION_DATATYPE_MISALIGNMENT:&nbsp;&nbsp;return&nbsp;&nbsp; "MISALIGNMENT" ;
&nbsp;&nbsp; case EXCEPTION_FLT_DENORMAL_OPERAND:&nbsp;&nbsp;return&nbsp;&nbsp; "FPU DENORMAL OPERAND" ;
&nbsp;&nbsp; case EXCEPTION_FLT_DIVIDE_BY_ZERO:&nbsp;&nbsp;return&nbsp;&nbsp; "FPU DIVISION BY ZERO" ;
&nbsp;&nbsp; case EXCEPTION_FLT_INEXACT_RESULT:&nbsp;&nbsp;return&nbsp;&nbsp; "FPU INEXACT RESULT" ;
&nbsp;&nbsp; case EXCEPTION_FLT_INVALID_OPERATION:&nbsp;&nbsp;return&nbsp;&nbsp; "FPU GENERIC EXCEPTION" ;
&nbsp;&nbsp; case EXCEPTION_FLT_OVERFLOW:&nbsp;&nbsp;return&nbsp;&nbsp; "FPU OVERFLOW" ;
&nbsp;&nbsp; case EXCEPTION_FLT_STACK_CHECK:&nbsp;&nbsp;return&nbsp;&nbsp; "FPU STACK OVERFLOW" ;
&nbsp;&nbsp; case EXCEPTION_FLT_UNDERFLOW:&nbsp;&nbsp;return&nbsp;&nbsp; "FPU UNDERFLOW" ;
&nbsp;&nbsp; case EXCEPTION_ILLEGAL_INSTRUCTION:&nbsp;&nbsp;return&nbsp;&nbsp; "ILLEGAL INSTRUCTION" ;
&nbsp;&nbsp; case EXCEPTION_IN_PAGE_ERROR:&nbsp;&nbsp;return&nbsp;&nbsp; "PAGE ERROR" ;
&nbsp;&nbsp; case EXCEPTION_INT_DIVIDE_BY_ZERO:&nbsp;&nbsp;return&nbsp;&nbsp; "DIVISION BY ZERO" ;
&nbsp;&nbsp; case EXCEPTION_INT_OVERFLOW:&nbsp;&nbsp;return&nbsp;&nbsp; "INTEGRAL OVERFLOW" ;
&nbsp;&nbsp; case EXCEPTION_INVALID_DISPOSITION:&nbsp;&nbsp;return&nbsp;&nbsp; "INVALID DISPOSITION" ;
&nbsp;&nbsp; case EXCEPTION_NONCONTINUABLE_EXCEPTION:&nbsp;&nbsp;return&nbsp;&nbsp; "NONCONTINUABLE EXCEPTION" ;
&nbsp;&nbsp; case EXCEPTION_PRIV_INSTRUCTION:&nbsp;&nbsp;return&nbsp;&nbsp; "PRIVILEGED INSTRUCTION" ;
&nbsp;&nbsp; case EXCEPTION_SINGLE_STEP:&nbsp;&nbsp;return&nbsp;&nbsp; "DEBUG STEP" ;
&nbsp;&nbsp; case EXCEPTION_STACK_OVERFLOW:&nbsp;&nbsp;return&nbsp;&nbsp; "STACK OVERFLOW" ;
&nbsp;&nbsp; default:&nbsp;&nbsp;return&nbsp;&nbsp; "UNKNOWN EXCEPTION" ;
&nbsp;&nbsp; }
}

sehex::sehex(struct _EXCEPTION_POINTERS&nbsp;&nbsp;*&nbsp;&nbsp;pep) throw()
{
&nbsp;&nbsp; static const char fmt&#91;&#93;&nbsp;&nbsp;=&nbsp;&nbsp; "%s at address %p" ;
&nbsp;&nbsp; try
&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::PEXCEPTION_RECORD per&nbsp;&nbsp;=&nbsp;&nbsp;pep -&nbsp;&nbsp;&#62; ExceptionRecord;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (per)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char&nbsp;&nbsp;*&nbsp;&nbsp;pen&nbsp;&nbsp;=&nbsp;&nbsp;ecstr(per -&nbsp;&nbsp;&#62; ExceptionCode);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int len&nbsp;&nbsp;=&nbsp;&nbsp;_scprintf(fmt, pen, per -&nbsp;&nbsp;&#62; ExceptionAddress);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (len +&nbsp;&nbsp;+&nbsp;&nbsp; &#62;&nbsp;&nbsp; 0 )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;*&nbsp;&nbsp;pbuf&nbsp;&nbsp;=&nbsp;&nbsp;static_cast &#60; char&nbsp;&nbsp;*&nbsp;&nbsp;&#62; (_alloca(len));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (pbuf)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sprintf_s(pbuf, len, fmt, pen, per -&nbsp;&nbsp;&#62; ExceptionAddress);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_str.assign (pbuf, len&nbsp;&nbsp;-&nbsp;&nbsp; 1 );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp; }
&nbsp;&nbsp; catch( .. .)
&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// we shouldn't show to the user a garbage string
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _str.clear ();
&nbsp;&nbsp; }
}

const std::string&nbsp;&nbsp;&#38;&nbsp;&nbsp;sehex::str(void) const throw()
{
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;_str;
}

static void translator(unsigned int, struct _EXCEPTION_POINTERS&nbsp;&nbsp;*&nbsp;&nbsp;pep)
{
&nbsp;&nbsp; throw sehex(pep);
}

luasehtrans::luasehtrans() throw()
&nbsp;&nbsp; : _bkp(_set_se_translator(::translator))
{
}

luasehtrans::~luasehtrans()
{
&nbsp;&nbsp; _set_se_translator(static_cast &#60; _se_translator_function &#62; (_bkp));
}

void luasehtrans::onex(void&nbsp;&nbsp;*&nbsp;&nbsp;vs) throw()
{
&nbsp;&nbsp; try
&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lua_State&nbsp;&nbsp;*&nbsp;&nbsp;s&nbsp;&nbsp;=&nbsp;&nbsp;static_cast &#60; lua_State&nbsp;&nbsp;*&nbsp;&nbsp;&#62; (vs);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::exception_ptr pe(std::current_exception());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( ! (nullptr&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp;pe))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::rethrow_exception(pe);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(const sehex&nbsp;&nbsp;&#38;&nbsp;&nbsp;e)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;luaO_pushfstring(s,&nbsp;&nbsp;"%s" ,&nbsp;&nbsp;e.str ().c_str());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(const std::exception&nbsp;&nbsp;&#38;&nbsp;&nbsp;e)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;luaO_pushfstring(s,&nbsp;&nbsp;"%s" ,&nbsp;&nbsp;e.what ());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch( .. .)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;luaO_pushfstring(s,&nbsp;&nbsp;"unrecognized exception" );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp; }
&nbsp;&nbsp; catch( .. .)
&nbsp;&nbsp; {
&nbsp;&nbsp; }
}
&nbsp;&nbsp;</pre>
=============
 Тксть вот и все, а ты боялась. Теперь lua_pcallk ловит и плюсовые, и SEH, и свои луа ошибки и выдает их на-гора единым принятым в луа способом, со строкой-описанием на вершине луа-стека.<br />=============<br />Добрый день.<br /> <br /> Действительно, сейчас обработка SEH исключений устроена некорректно. Мы переделаем её в ближайшем обновлении ПО.<br /> <br /> Спасибо за информацию.<br /> <br /> Приносим извинения за причиненные неудобства. <br />
			<i>13.11.2020 19:52:13, Alexey Ivannikov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message50319/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message50319/topic5829/</guid>
			<pubDate>Fri, 13 Nov 2020 19:52:13 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message49021/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<p>Добрый день,<br /> &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; &nbsp; Действительно, в ПО QLUA некорректно выполняется вызов &nbsp; &nbsp; &nbsp; lua_checkstack. Мы исправим ошибку в очредном обновлении ПО.</p>Приносим извинения за причиненные неудобства. <br />
			<i>06.10.2020 15:04:08, Alexander Kopyatkevich.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message49021/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message49021/topic5829/</guid>
			<pubDate>Tue, 06 Oct 2020 15:04:08 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Вопросы, не требующие ответов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message48982/topic5829/">Вопросы, не требующие ответов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_v3B3LUIp" href="/user/13952/" bx-tooltip-user-id="13952">TGB</a> написал:<br />выдача кода EXCEPTION_CONTINUE_SEARCH<br />=============<br />Если всегда его выдавать, есть решение проще - просто не ставить ловушку, результат абсолютно тот же. Большинство SEH исключений фатальными не являются, многие даже позволяют EXCEPTION_CONTINUE_EXECUTION (но с использованием транслятора так не сделать). Реально смертельных там штуки три всего, вот их точно надо выше пробрасывать без обработки. <br />
			<i>05.10.2020 17:16:41, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message48982/topic5829/</link>
			<guid>http://forum.quik.ru/messages/forum10/message48982/topic5829/</guid>
			<pubDate>Mon, 05 Oct 2020 17:16:41 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
