<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Передача таблицы с ключем из Lua в Си]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Передача таблицы с ключем из Lua в Си форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Wed, 29 Apr 2026 08:17:09 +0300</pubDate>
		<item>
			<title>Передача таблицы с ключем из Lua в Си</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message66043/topic7655/">Передача таблицы с ключем из Lua в Си</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<p>Делаю так:</p>
====code====
<pre>lua_getfield(L, -1, "Size");&nbsp;&nbsp;//Извлекаю ключ Size из таблицы и помещаю на вершину стека

//Проверяю, что на вершине стека:

&nbsp;&nbsp;&nbsp;&nbsp;int status_lua_isC_function = lua_iscfunction(L, -1);
&nbsp;&nbsp;&nbsp;&nbsp;std::cout &#60;&#60; "status_lua_isC_function:" &#60;&#60; status_lua_isC_function &#60;&#60; std::endl;&nbsp;&nbsp;//return 1


&nbsp;&nbsp;&nbsp;&nbsp;int status_lua_is_function = lua_isfunction(L, -1);
&nbsp;&nbsp;&nbsp;&nbsp;std::cout &#60;&#60; "status_lua_is_function:" &#60;&#60; status_lua_is_function &#60;&#60; std::endl;&nbsp;&nbsp;&nbsp;&nbsp; //return 1

//return 1 - означает на вершине стека - функция - видимо извлеченная функция Size.

&nbsp;&nbsp;&nbsp;&nbsp;lua_pushvalue(L, -2); // Создаю копию таблицы и помещаю ее на вершину стека после функции Size.

&nbsp;&nbsp;&nbsp;&nbsp;int status_lua_pcall = lua_pcall(L, 1, 1, 0); // Вызываю функцию Size с аргументом в виде таблицы и одним возвращаемым значением

&nbsp;&nbsp;&nbsp;&nbsp;if (status_lua_pcall == LUA_ERRERR)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout &#60;&#60; "LUA_ERRERR" &#60;&#60; std::endl;
&nbsp;&nbsp;&nbsp;&nbsp;}</pre>
=============
<p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p>lua_pcall - всегда завершается ошибкой LUA_ERRERR - ошибка во время выполнения обработчика ошибок.</p> <br />
			<i>04.10.2022 18:45:09, Quikos.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message66043/topic7655/</link>
			<guid>http://forum.quik.ru/messages/forum10/message66043/topic7655/</guid>
			<pubDate>Tue, 04 Oct 2022 18:45:09 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Передача таблицы с ключем из Lua в Си</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message66028/topic7655/">Передача таблицы с ключем из Lua в Си</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Это гарантировано должно работать, НО не работает. <br />
			<i>04.10.2022 10:16:38, Quikos.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message66028/topic7655/</link>
			<guid>http://forum.quik.ru/messages/forum10/message66028/topic7655/</guid>
			<pubDate>Tue, 04 Oct 2022 10:16:38 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Передача таблицы с ключем из Lua в Си</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message66027/topic7655/">Передача таблицы с ключем из Lua в Си</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Пробую так:<br /><br />
====code====
<pre>&nbsp;&nbsp;&nbsp;&nbsp;int size_stack = lua_gettop(L);
&nbsp;&nbsp;&nbsp;&nbsp;std::cout &#60;&#60; size_stack &#60;&#60; std::endl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Размер стека 1

&nbsp;&nbsp;&nbsp;&nbsp;lua_pushstring(L, "Size");

&nbsp;&nbsp;&nbsp;&nbsp;size_stack = lua_gettop(L);
&nbsp;&nbsp;&nbsp;&nbsp;std::cout &#60;&#60; size_stack &#60;&#60; std::endl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Размер стека 2

&nbsp;&nbsp;&nbsp;&nbsp;lua_gettable(L, -2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//lua_gettable - помешает на вершину стека значение Таблицы, которая расположена первый элементом в стеке по ключу расположенному на вершине стека, то есть по ключу "Size"

&nbsp;&nbsp;&nbsp;&nbsp;size_stack = lua_gettop(L);
&nbsp;&nbsp;&nbsp;&nbsp;std::cout &#60;&#60; size_stack &#60;&#60; std::endl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Размер стека 2, то есть&nbsp;&nbsp;lua_gettable - доабвила значение по ключу Size за место доавленной выше строки "Size"

&nbsp;&nbsp;&nbsp;&nbsp;std::cout &#60;&#60; "Size_number:" &#60;&#60; lua_tonumber(L, -1) &#60;&#60; std::endl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Извлекаю значение с вершин стека, НО оно равно НУЛЮ!!! ХОТЯ таблица переданная из Lua в Си - гарантировано имеет размер</pre>
============= <br />
			<i>04.10.2022 10:11:40, Quikos.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message66027/topic7655/</link>
			<guid>http://forum.quik.ru/messages/forum10/message66027/topic7655/</guid>
			<pubDate>Tue, 04 Oct 2022 10:11:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Передача таблицы с ключем из Lua в Си</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message66018/topic7655/">Передача таблицы с ключем из Lua в Си</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Получаю таблицу свечей в Lua:<br /><br /><p></p>
====code====
<pre>local my_table_ = CreateDataSource(code_class_, code_paper_, interval)

local size_table = my_table_:Size()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Гарантировано не равно нулю.</pre>
=============
<p></p>Отправляю в dll в Си:<br />
====code====
<pre>Quik_Lua_connector.get_data_frim_Lua(size_table)</pre>
=============
<br />В dll принимаю:<br />
====code====
<pre>static int forLua_get_data_frim_Lua(lua_State* L)
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout &#60;&#60; "Size:" &#60;&#60; lua_tonumber(L, -1) &#60;&#60; std::endl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Снимаю данные с вершины стека. Все выводится на косноль нормально.
}</pre>
=============
<br /><br />Теперь я хочк передать не отдельный параметр полученной таблицы my_table_, а сразу всю таблицу:<br /><br />Отправляю в dll в Си:<br />
====code====
<pre>Quik_Lua_connector.get_data_frim_Lua(size_table)</pre>
=============
В dll принимаю:<br /><br />
====code====
<pre>static int forLua_get_data_frim_Lua(lua_State* L) 
{&nbsp;&nbsp; 

 lua_pushnumber(L, 1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Добавляю в стек номер индекса переданной таблицы к элементу которой я хочу получить доступ. lua_gettable(L, 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;//Помещает на вершину стека переданной таблицы - расположенная по 1 элементу в стеке, и индексу в самой таблице - по номеру элемента с вершины стека, то есть с номера "1", которая я добавил строчкой выше.
 lua_getfield(L, -1, "Size");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Теперь беру значение из стека с вершины стека, то есть то значние, которое я извлек из таблицы по индексу "1" (грубо говоря первая свеча) и извлекаю из него поле с заданным именем "Size" и значение этого поля помещается на вершину стека.
 std::cout &#60;&#60; "Size:" &#60;&#60; lua_tonumber(L, -1) &#60;&#60; std::endl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Беру значение с вершины стека и получаю дулю с маслом или ошибку "unrecognized exception" в самом квике.
}</pre>
=============
<br />То есть передать обычную таблицу в виде массива из Lua в Си и получить доступ к значнеием - не составляет проблемы, а передача таблицы с ключом и плучение доступа по ключу не работает в Квике. <br />
			<i>03.10.2022 19:36:58, Quikos.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message66018/topic7655/</link>
			<guid>http://forum.quik.ru/messages/forum10/message66018/topic7655/</guid>
			<pubDate>Mon, 03 Oct 2022 19:36:58 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
