<?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; Передать в SetUpdateCallback дополнительные параметры]]></title>
		<link>https://quik2dde.ru/viewtopic.php?id=410</link>
		<atom:link href="https://quik2dde.ru/extern.php?action=feed&amp;tid=410&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Передать в SetUpdateCallback дополнительные параметры».]]></description>
		<lastBuildDate>Wed, 12 Oct 2022 16:59:36 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Передать в SetUpdateCallback дополнительные параметры]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3828#p3828</link>
			<description><![CDATA[<p>Вот так можно:</p><div class="codebox"><pre><code>static int my_pushcclosure_func(lua_State* L)
{
    std::cout &lt;&lt; &quot;------------------------------------------------&quot; &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;my_pushcclosure_func:&quot; &lt;&lt; lua_gettop(L) &lt;&lt; std::endl;

    std::cout &lt;&lt; &quot;PARAM1:&quot; &lt;&lt; lua_tostring(L, lua_upvalueindex(1)) &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;PARAM2:&quot; &lt;&lt; lua_tostring(L, lua_upvalueindex(2)) &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;------------------------------------------------&quot; &lt;&lt; std::endl;
}



    lua_pushstring(L, &quot;param1&quot;);
    lua_pushstring(L, &quot;param2&quot;);
    lua_pushcclosure(L, my_pushcclosure_func, 2);

    int status_lua_pcall = lua_pcall(L, 0, 0, 0);  </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Wed, 12 Oct 2022 16:59:36 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3828#p3828</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать в SetUpdateCallback дополнительные параметры]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3824#p3824</link>
			<description><![CDATA[<p>...</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Wed, 12 Oct 2022 07:15:46 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3824#p3824</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать в SetUpdateCallback дополнительные параметры]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3821#p3821</link>
			<description><![CDATA[<p>Технические моменты с Lua-API для этого все разобраны, как я понимаю.<br />Осталось сделать нужную функцию на С++ - да и все.<br />Так мне видится на данный момент <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Wed, 12 Oct 2022 05:00:46 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3821#p3821</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать в SetUpdateCallback дополнительные параметры]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3820#p3820</link>
			<description><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Я про другое. Ок, вы зачем-то хотите писать робота полностью на C++. Пусть так.<br />Но зачем тащить Lua-подходы при этом = вот в чем вопрос.</p><p>До этого ваши вопросы касались по сути Lua API и как что в нем реализовать. Это понятно, без этого никак.<br />Но в данном случае, на мой взгляд, это уже копирование специфичных именно для Lua-практик, которые вовсе не обязательно тянуть в C++ код. На мой взгляд.</p></blockquote></div><p>Да я толбко рад буду, если это можно решить без Lua.</p><p>Ну вот сосбвенно задача над которой я уже неделю с бьюсь, без Вашей помощи было еще дольше <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p><p>Задача: <br />-вызвав функцию C++ и получить std::vector&lt;my_struct&gt; данные исторических свечей.<br />-вызвав функцию C++ и получить в my_struct данные свечи изменений свечи.</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Tue, 11 Oct 2022 17:52:36 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3820#p3820</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать в SetUpdateCallback дополнительные параметры]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3819#p3819</link>
			<description><![CDATA[<p>Я про другое. Ок, вы зачем-то хотите писать робота полностью на C++. Пусть так.<br />Но зачем тащить Lua-подходы при этом = вот в чем вопрос.</p><p>До этого ваши вопросы касались по сути Lua API и как что в нем реализовать. Это понятно, без этого никак.<br />Но в данном случае, на мой взгляд, это уже копирование специфичных именно для Lua-практик, которые вовсе не обязательно тянуть в C++ код. На мой взгляд.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Tue, 11 Oct 2022 16:30:47 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3819#p3819</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать в SetUpdateCallback дополнительные параметры]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3818#p3818</link>
			<description><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Но в целом я не совсем понимаю зачем вы в С++ переносите Lua-подходы. В С++, раз уж мы там, можно использовать свои подходы. Иначе зачем вообще переходить на С++, только лишняя морока.</p></blockquote></div><p>То, что морока - это я полностью согласен.<br />Я не хочу, чтобы с скрипте Квика был какой либо код - кроме одного, который вызывает С++ - функцию и внутри уже которой будет весь код, который дергает Квик из С++.</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Tue, 11 Oct 2022 13:15:29 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3818#p3818</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать в SetUpdateCallback дополнительные параметры]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3817#p3817</link>
			<description><![CDATA[<p>Но в целом я не совсем понимаю зачем вы в С++ переносите Lua-подходы. В С++, раз уж мы там, можно использовать свои подходы. Иначе зачем вообще переходить на С++, только лишняя морока.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Tue, 11 Oct 2022 12:48:48 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3817#p3817</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать в SetUpdateCallback дополнительные параметры]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3816#p3816</link>
			<description><![CDATA[<p>Вообще да, занятная штука эти &quot;замыкания&quot; в Lua. Из них доступен локальный контекст, который являлся окружением &quot;замыкания&quot; (closure) на момент его создания.</p><p>Накидал такой примерчик (по мотивам кода про CreateDataSource):</p><div class="codebox"><pre><code>function cb(idx) 
  print(&#039;cb aa=&#039;, a) 
  print(&#039;cb idx=&#039;, idx) 
end 

function GetT(f)
   print(&#039;GetT a=&#039;, a)
   return {1,&#039;zZ&#039;, func=f}
end

local a = 5

t = GetT(function(idx) print(&#039;aa=&#039;, a) print(&#039;idx=&#039;, idx) end )
t1 = GetT(cb)

a = 8

t.func(55)
t1.func(66)

a = 99
t.func(33)</code></pre></div><p>Попробовать можно здесь:<br />[url]https://qlua.ru/demo/[/url]</p><p>Выводит:<br /></p><div class="codebox"><pre><code>GetT a= nil  &lt;-- из простых функций не видим локальную переменную a
GetT a= nil

aa= 8        &lt;-- это вызов t.func(55), где в таблице t - замыкание; здесь видно значение a, причем уже обновленное! 
idx= 55

cb aa= nil   &lt;-- а это вызов t1.func(66), где просто функция вызывается; в ней уже переменная a недоступна
cb idx= 66

aa= 99       &lt;-- и снова вызов t.func(99), здесь снова видно обновлённое значение a
idx= 33</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Tue, 11 Oct 2022 12:47:30 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3816#p3816</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать в SetUpdateCallback дополнительные параметры]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3815#p3815</link>
			<description><![CDATA[<div class="quotebox"><cite>Serg_ пишет:</cite><blockquote><p>Похоже нужно делать через lua_pushcclosure, пока не понял как.</p></blockquote></div><p>Подробный пример здесь:<br />[url]http://www.lua.org/pil/27.3.3.html[/url]</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Tue, 11 Oct 2022 12:39:49 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3815#p3815</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать в SetUpdateCallback дополнительные параметры]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3814#p3814</link>
			<description><![CDATA[<p>Похоже нужно делать через lua_pushcclosure, пока не понял как.</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Tue, 11 Oct 2022 11:16:19 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3814#p3814</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать в SetUpdateCallback дополнительные параметры]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3813#p3813</link>
			<description><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>По-моему, в данном случае просто назначаемая в SetUpdateCallback функция callback вызывает другую функцию, куда передает дополнительные параметры из глобальных переменных. Это на любом языке сделать можно</p></blockquote></div><p>Это все хорошо, но ОТКУДА в вызываемой SetUpdateCallback функции возьмутся мои передаваемые значения ?? В эту функцию приходит Lua-стек только с одними данными - индексом свечи.</p><p>В этом и вопрос, как передать туда дополнительные данные.</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Tue, 11 Oct 2022 11:08:41 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3813#p3813</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать в SetUpdateCallback дополнительные параметры]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3812#p3812</link>
			<description><![CDATA[<p>По-моему, в данном случае просто назначаемая в SetUpdateCallback функция callback вызывает другую функцию, куда передает дополнительные параметры из глобальных переменных. Это на любом языке сделать можно</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Tue, 11 Oct 2022 10:36:47 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3812#p3812</guid>
		</item>
		<item>
			<title><![CDATA[Передать в SetUpdateCallback дополнительные параметры]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3811#p3811</link>
			<description><![CDATA[<p>И я опять с вопросом.</p><p>При вызове SetUpdateCallback по умолчанию передать туда доп. параметры нельзя:</p><br /><div class="codebox"><pre><code>function my_callback_(index)

--index - индекс свечи в таблице my_table, НО сама таблица по умолчанию не приходит, что просто дикость.

end


local my_table = CreateDataSource(code_class, code_paper_ interval)

my_table :SetUpdateCallback(my_callback_)</code></pre></div><br /><br /><p>Но, передать доп. параметры в callback - можно с помощью такой контракции, в данном случае я не знаю, что она означает на Lua, просто подсмотрел в интернете:</p><div class="codebox"><pre><code>function my_callback_(my_table_, param1, param2, index)

--Теперь тут доступны переданные дополнительные параметры...my_table_, param1, param2 - помимо стандартного index

end


local my_table = CreateDataSource(code_class, code_paper_ interval)

parametr_1 = &quot;1&quot;
parametr_2 = &quot;2&quot;

my_table :SetUpdateCallback(function(idx)my_callback_(my_table,parametr_1, parametr_2, idx) end)</code></pre></div><p>И теперь параметры замечательно переданы в callback SetUpdateCallback.</p><br /><p>И вот подскажите пожалуйста, а можно ли подобное провернуть в Си ??</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Tue, 11 Oct 2022 09:18:43 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3811#p3811</guid>
		</item>
	</channel>
</rss>
