<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Вызвать Lua функцию из С++ c передачей callback`а]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Вызвать Lua функцию из С++ c передачей callback`а форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Wed, 29 Apr 2026 19:26:49 +0300</pubDate>
		<item>
			<title> Вызвать Lua функцию из С++ c передачей callback`а</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message66104/topic7665/"> Вызвать Lua функцию из С++ c передачей callback`а</a></b> <i> Вызвать Lua функцию из С++ c передачей callback`а</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_B5DG7yeF" href="/user/15613/" bx-tooltip-user-id="15613">Quikos</a> написал:<br /> Подскажите пожалуйста, есть ли пример, как вызывать функцию к примеру SetUpdateCallback с передачей в нее параметров ? &nbsp;Ну то есть, вот аналог код в Lua: &nbsp;
====code====
<pre>&nbsp;&nbsp; local&nbsp;&nbsp;my_table_ =&nbsp;&nbsp; CreateDataSource (code_class_, code_paper_, interval)

my_table_: SetUpdateCallback ( function (idx)my_callback_(my_table_, code_class_, code_paper_, interval)&nbsp;&nbsp;end )
&nbsp;&nbsp;</pre>
=============
 &nbsp; &nbsp; &nbsp; &nbsp;
====code====
<pre>&nbsp;&nbsp; function&nbsp;&nbsp; my_callback_ (my_table_, code_class, code_paper, interval)
 .. .код

 end&nbsp;&nbsp; </pre>
=============
 &nbsp;
====code====
<pre>&nbsp;&nbsp;//В L&nbsp;&nbsp;-&nbsp;&nbsp;на вершине стека уже находится таблица возвращенная&nbsp;&nbsp;CreateDataSource .

lua_getfield(L,&nbsp;&nbsp;-&nbsp;&nbsp;1 ,&nbsp;&nbsp;"SetUpdateCallback" );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//"Извлекаем" на вершину стека из&nbsp;&nbsp;"таблицы"&nbsp;&nbsp;функцию&nbsp;&nbsp;SetUpdateCallback .&nbsp;&nbsp;</pre>
=============
 <br /><br />Теперь нужно поместить в стек последовательно параметры функции SetUpdateCallback, но тут уже не могу понять:<br />- как поместить function(idx)<br />- как поместить my_callback_<br /><br />Не могу понять, где должна быть объявлена моя функция callback ? <br /><br /><br />В Lua скрипте и тогда мне ее нужно просто получить через Lua_global или же в C++ ?<br />=============<br />Не совсем понятно, что Вы не знаете -луа или библиотеку QLUA, поэтому поясняю оба момента.<br />----------------------------<br />см. документацию &nbsp;луа:<br />----------------<br />Следующий пример показывает, как хост-программа может выполнять эквивалент этого кода Lua: a = f(&quot;как&quot;, т.x, 14)<br />Вот оно в C:<br /> lua_getglobal(L, &quot;f&quot;); /* вызываемая функция */<br /> lua_pushliteral(L, &quot;как&quot;); /* 1-й аргумент */<br /> lua_getglobal(L, &quot;t&quot;); /* таблица, подлежащая индексации */<br /> lua_getfield(L, -1, &quot;x&quot;); /* результат ввода t.x (2-й аргумент) */<br /> lua_remove(L, -2); /* удалить &#39;t&#39; из стека */<br /> lua_pushinteger(L, 14); /* 3-й аргумент */<br /> lua_call(L, 3, 1); /* вызов &#39;f&#39; с 3 аргументами и 1 результатом */<br /> lua_setglobal(L, &quot;a&quot;); /* установить глобальный &#39;a&#39; */<br />=================<br />см документацию библиотеки QLUA , <br />-----------------<br />Формат функции обратного вызова: &nbsp;function call_back(NUMBER index)<br />Пример получения времени из свечки:<br />function cb( index ) &nbsp; -- объявили колбек функцию<br />local t = ds:T(index)<br />end<br />------------------<br /> SetUpdateCallback(ds,cb) &nbsp; -- запихнули ссылку на нее в таблицу источника<br />===============================<br />если Вы пишите на Си то колбек объявляете на СИ,<br />но можете и на луа.<br />в любом случае это глобальная функция.<br />-----------------<br />ВСЕ функции библиотеки QLUA - глобальные.<br />-----------------------<br />вроде бы все понятно?<br />----------------------<br />попробуйте &nbsp;написать, потом выложите и спросите что не так.<br />================= <br />
			<i>09.10.2022 21:36:18, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message66104/topic7665/</link>
			<guid>http://forum.quik.ru/messages/forum10/message66104/topic7665/</guid>
			<pubDate>Sun, 09 Oct 2022 21:36:18 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title> Вызвать Lua функцию из С++ c передачей callback`а</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message66088/topic7665/"> Вызвать Lua функцию из С++ c передачей callback`а</a></b> <i> Вызвать Lua функцию из С++ c передачей callback`а</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<p>Подскажите пожалуйста, есть ли пример, как вызывать функцию к примеру SetUpdateCallback с передачей в нее параметров ?</p><p>Ну то есть, вот аналог код в Lua:</p>
====code====
<pre>local my_table_= CreateDataSource(code_class_, code_paper_, interval)

my_table_:SetUpdateCallback(function(idx)my_callback_(my_table_, code_class_, code_paper_, interval) end)
</pre>
=============
<p></p><p></p><p></p>
====code====
<pre>function my_callback_(my_table_, code_class, code_paper, interval)
...код

end</pre>
=============

====code====
<pre>//В L - на вершине стека уже находится таблица возвращенная CreateDataSource.

lua_getfield(L, -1, "SetUpdateCallback");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//"Извлекаем" на вершину стека из "таблицы" функцию SetUpdateCallback.</pre>
=============
<br /><br />Теперь нужно поместить в стек последовательно параметры функции SetUpdateCallback, но тут уже не могу понять:<br />- как поместить function(idx)<br />- как поместить my_callback_<br /><br />Не могу понять, где должна быть объявлена моя функция callback ? <br /><br /><br />В Lua скрипте и тогда мне ее нужно просто получить через Lua_global или же в C++ ? <br />
			<i>07.10.2022 13:45:17, Quikos.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message66088/topic7665/</link>
			<guid>http://forum.quik.ru/messages/forum10/message66088/topic7665/</guid>
			<pubDate>Fri, 07 Oct 2022 13:45:17 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
