<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[QUIK -> DDE &mdash; OnAllTrade на Lua C API]]></title>
		<link>https://quik2dde.ru/viewtopic.php?id=424</link>
		<atom:link href="https://quik2dde.ru/extern.php?action=feed&amp;tid=424&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «OnAllTrade на Lua C API».]]></description>
		<lastBuildDate>Wed, 30 Nov 2022 14:28:28 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: OnAllTrade на Lua C API]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4007#p4007</link>
			<description><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><div class="quotebox"><cite>Serg_ пишет:</cite><blockquote><p>в Lua-Скрипте нужно еще прописать вызов OnQuote.</p></blockquote></div><p>Это как? можно код? Что вы вызываете в Lua-Скрипте?</p></blockquote></div><p>Вот это:</p><div class="codebox"><pre><code>function OnQuote(class, sec)
end</code></pre></div><p>Если я этого не прописываю в Lua-срипте, то в dll-моя функция объявленная через lua_setglobal - не вызывается.</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Wed, 30 Nov 2022 14:28:28 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4007#p4007</guid>
		</item>
		<item>
			<title><![CDATA[Re: OnAllTrade на Lua C API]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4002#p4002</link>
			<description><![CDATA[<div class="quotebox"><cite>Serg_ пишет:</cite><blockquote><p>в Lua-Скрипте нужно еще прописать вызов OnQuote.</p></blockquote></div><p>Это как? можно код? Что вы вызываете в Lua-Скрипте?</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Wed, 30 Nov 2022 06:22:19 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4002#p4002</guid>
		</item>
		<item>
			<title><![CDATA[Re: OnAllTrade на Lua C API]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4000#p4000</link>
			<description><![CDATA[<p>Оказалось, что еще в самом Lua-Скрипте нужно еще прописать вызов OnQuote.</p><p>Спасибо теперь все работает!</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Mon, 28 Nov 2022 13:26:08 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4000#p4000</guid>
		</item>
		<item>
			<title><![CDATA[Re: OnAllTrade на Lua C API]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3999#p3999</link>
			<description><![CDATA[<p>Что то я видимо все равно не так делаю.</p><p>Перенес установку &quot;OnQuote&quot; в luaopen_xxx ... однако callback все равно не вызывается.</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Mon, 28 Nov 2022 13:02:04 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3999#p3999</guid>
		</item>
		<item>
			<title><![CDATA[Re: OnAllTrade на Lua C API]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3998#p3998</link>
			<description><![CDATA[<div class="quotebox"><cite>Serg_ пишет:</cite><blockquote><p>не int main, а функция из dll вызываемая скриптом из самого Квика, которая и передает &quot;L&quot;</p></blockquote></div><p>Поздно. Надо делать в luaopen_XXX</p><p>Есть нюанс в том, как QUIK распознает наличие callback-функций.<br />Когда загружается Lua-скрипт, он выполняется, что приводит к<br />1) выполнению кода, находящегося все function<br />2) формированию в глобальной области видимости имен переменных-функций с именами, указанных в function</p><p>Пункт 2) - это особенность Lua, когда синтаксис описания функций на самом деле просто определяет глобальные переменные с тем же именем, что названа функция, тип у этих переменных &quot;функция&quot;, и содержимое равно описанию функции.</p><p>Пункты 1) и 2) делает сам интерпретатор Lua.<br />После этого QUIK просматривает все глобальные определения, ищет среди них известные имена callback-функций и для тех callback, которые находит, у себя прописывает признак &quot;такой callback найден&quot;.<br />Далее, когда возникает то или иное событие, QUIK смотрит был ли определен соответствующий callback, и если был - то он вызывается, а если не был -то не вызывается.<br />Т.е. если какой-то callback не был определен на старте скрипта - то он уже никогда не вызовется, даже если в процессе работы скрипта его доопределить (синтаксис Lua это позволяет).</p><p>Эта особенность работы давно была обнаружена при использовании Lua в QUIK, про нее надо просто знать и учитывать. Сделано разработчиками видимо для ускорения, чтобы для каждого события не сканировать заново глобальные определения в поисках функции-обработчика.</p><p>Соответственно у вас при определении callback в dll происходит тоже самое: стартовый скрипт загружается, выполняется, в этот момент&nbsp; из библиотеки вызывается&nbsp; luaopen_XXX. Если эта функция что-то добавила в глобальную область видимости - то соответствующие callback будут вызываться; если не добавила - то потом уже добавлять какие-то callback-функции бесполезно, QUIK про них не знает (на этапе загрузки скрипта) и вызывать не будет.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Mon, 28 Nov 2022 10:49:55 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3998#p3998</guid>
		</item>
		<item>
			<title><![CDATA[Re: OnAllTrade на Lua C API]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3997#p3997</link>
			<description><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><div class="quotebox"><cite>Serg_ пишет:</cite><blockquote><div class="codebox"><pre><code>int main()
{
lua_pushcfunction(L, global_callback__OnQuote);
lua_setglobal(L, &quot;OnQuote&quot;);
}</code></pre></div></blockquote></div><br /><p>main??<br />Наверное все же в luaopen_XXX код инициализации, инаеч не понятно откуда у вас L берется</p></blockquote></div><br /><p>Это я автоматом написал. Там естественно не int main, а функция из dll вызываемая скриптом из самого Квика, которая и передает &quot;L&quot;.</p><p>Но суть в том, что установленная глобальной функция, как &quot;OnQuote&quot; - почему то не хочет вызываться Квиком.</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Mon, 28 Nov 2022 09:42:52 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3997#p3997</guid>
		</item>
		<item>
			<title><![CDATA[Re: OnAllTrade на Lua C API]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3996#p3996</link>
			<description><![CDATA[<div class="quotebox"><cite>Serg_ пишет:</cite><blockquote><div class="codebox"><pre><code>int main()
{
lua_pushcfunction(L, global_callback__OnQuote);
lua_setglobal(L, &quot;OnQuote&quot;);
}</code></pre></div></blockquote></div><br /><p>main??<br />Наверное все же в luaopen_XXX код инициализации, инаеч не понятно откуда у вас L берется</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Mon, 28 Nov 2022 09:35:46 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3996#p3996</guid>
		</item>
		<item>
			<title><![CDATA[Re: OnAllTrade на Lua C API]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3995#p3995</link>
			<description><![CDATA[<p>Что то не работает. Сделал вот так:</p><br /><div class="codebox"><pre><code>static int global_callback__OnQuote(lua_State* L)
{
    std::cout &lt;&lt; &quot;global_callback__OnQuote&quot; &lt;&lt; std::endl;

    return 0;
}



int main()
{

lua_pushcfunction(L, global_callback__OnQuote);
lua_setglobal(L, &quot;OnQuote&quot;);

}</code></pre></div><p>Ошибок вроде бы нет, но функция global_callback__OnQuote - не вызывается Квиком.<br />Предварительно заказ получение стакана я конечно же сделал, да и в Квике у меня стаканы открыты.</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Mon, 28 Nov 2022 08:05:51 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3995#p3995</guid>
		</item>
		<item>
			<title><![CDATA[Re: OnAllTrade на Lua C API]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3970#p3970</link>
			<description><![CDATA[<p>Вам её не надо вызывать. Её вызовет quik<br />Вам надо сделать на Си обычную луа функцию и зарегистрировать её в качестве глобальной.</p><p>lua_pushcfunction<br />lua_setglobal</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Fri, 18 Nov 2022 16:39:18 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3970#p3970</guid>
		</item>
		<item>
			<title><![CDATA[OnAllTrade на Lua C API]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3969#p3969</link>
			<description><![CDATA[<p>Подскажите пожалуйста, а как вызвать функцию OnAllTrade на Lua C ?</p><p>Что то я в ступор встал - одно дело к примеру вызывать CreateDataSource для которого нужно указывать callback функцию и создать callback-функцию на Си.</p><p>А тут нет callback функции, собственно сама OnAllTrade - является одной глобальной callback-функцией.</p><br /><p>Ну то есть я могу поместить на стек эту функцию:</p><div class="codebox"><pre><code>lua_getglobal(L, &quot;OnAllTrade &quot;);</code></pre></div><p>И вызвать lua_pcall...&nbsp; ну дальше то что ? Это же не &quot;обычная&quot; функция.</p><p>Но, на этом мое понимание заканчивается. <img src="https://quik2dde.ru/img/smilies/sad.png" width="15" height="15" alt="sad" /></p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Thu, 17 Nov 2022 20:07:53 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3969#p3969</guid>
		</item>
	</channel>
</rss>
