<?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; lua_pushstring - что делает ?]]></title>
		<link>https://quik2dde.ru/viewtopic.php?id=385</link>
		<atom:link href="https://quik2dde.ru/extern.php?action=feed&amp;tid=385&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «lua_pushstring - что делает ?».]]></description>
		<lastBuildDate>Sat, 24 Sep 2022 18:18:01 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: lua_pushstring - что делает ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3635#p3635</link>
			<description><![CDATA[<p>Из документации, обратите внимание на комментарий:<br /></p><div class="codebox"><pre><code>return 1;  /* number of results */</code></pre></div><p>[url]https://www.lua.org/pil/26.1.html[/url]</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Sat, 24 Sep 2022 18:18:01 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3635#p3635</guid>
		</item>
		<item>
			<title><![CDATA[Re: lua_pushstring - что делает ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3634#p3634</link>
			<description><![CDATA[<div class="quotebox"><cite>Serg_ пишет:</cite><blockquote><p>Или что в Вашем понимании кол-во ? Кол-во чего ?</p></blockquote></div><div class="quotebox"><cite>swerg пишет:</cite><blockquote><p> return(1) говорит, что функция возвращает 1 параметр (функции в Lua могут не возвращать никакое значение, либо возвращать одно или несколько результирующих значений любых типов, не только один результат).</p></blockquote></div><p>Иногда у меня складывается впечатление, что вы не читаете ответы.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Sat, 24 Sep 2022 18:15:23 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3634#p3634</guid>
		</item>
		<item>
			<title><![CDATA[Re: lua_pushstring - что делает ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3633#p3633</link>
			<description><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Почему &quot;под соответствующим номером&quot;? Это количество же.</p></blockquote></div><p>Ну тесты показывают, что это именно номер элемента в стеке. Причем нумерация начинается с вершины стека.<br />Или что в Вашем понимании кол-во ? Кол-во чего ?</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Sat, 24 Sep 2022 16:37:50 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3633#p3633</guid>
		</item>
		<item>
			<title><![CDATA[Re: lua_pushstring - что делает ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3631#p3631</link>
			<description><![CDATA[<div class="quotebox"><cite>Serg_ пишет:</cite><blockquote><p>return 2,3 ... - возвращает в вызывавшую функцию элемент стека под соответствующим номером.</p></blockquote></div><p>Почему &quot;под соответствующим номером&quot;? Это количество же.</p><div class="quotebox"><cite>Serg_ пишет:</cite><blockquote><p>Что, если я хочу передать более одного элемента обратно в функцию ?</p></blockquote></div><p>Если определённое количество результатов - то вызывайте функции push_xxx столько раз, сколько возвращаемых значений, после чего в return впишите количество возвращаемых из функции в Lua значений.</p><p>В Lua синтаксисе Lua несколько результатов, возвращаемых из функции, получаются следующим синтаксисом:<br /></p><div class="codebox"><pre><code>function MyFunc()
   x = 5
   y = 6 * x
   s = &#039;ABC&#039;
   return x, y, s
end

a,b,c = MyFunc()</code></pre></div><div class="quotebox"><cite>Serg_ пишет:</cite><blockquote><p>А можно ли вернуть весь стек ?</p></blockquote></div><p>Не знаю. Вопрос в том, как вы это будете читать в Lua?</p><p>Если требуется вернуть произвольное (переменное) количество результатов - просто возвращайте таблицу из функции.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Sat, 24 Sep 2022 15:45:04 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3631#p3631</guid>
		</item>
		<item>
			<title><![CDATA[Re: lua_pushstring - что делает ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3628#p3628</link>
			<description><![CDATA[<p>Извините позвольте пожалуйста еще один вопрос.</p><p>Вот return 1 или return 2,3 ... - возвращает в вызывавшую функцию элемент стека под соответствующим номером. <br />А можно ли вернуть весь стек ? Что, если я хочу передать более одного элемента обратно в функцию ?</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Sat, 24 Sep 2022 12:41:13 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3628#p3628</guid>
		</item>
		<item>
			<title><![CDATA[Re: lua_pushstring - что делает ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3624#p3624</link>
			<description><![CDATA[<div class="quotebox"><cite>Serg_ пишет:</cite><blockquote><p>Стек уничтожается или продолжает существовать ? Нужно ли его очищать ?</p></blockquote></div><p>Стек, разумеется, продолжает существовать. Он существует все время, пока выполняется Lua скрипт. (см. примеры в гугле <em>&quot;как встроить Lua в свою программу на Си&quot;</em>)</p><p>Если речь просто про принять значения / вернуть значения, то там довольно простые паттерны кода (см. примеры), сверх этого ничего чистить / освобождать не требуется.</p><p>Если же хочется чуть глубже понять методы работы со стеком и что там в какой момент происходит, но загуглите и посмотрите статьи / примеры на тему <em>&quot;как вернуть таблицу в Lua-код из функции на Си&quot;</em> и <em>&quot;как в Си-функцию передать таблицу из Lua-скрипта&quot;</em>. Я на память не подскажу что там как устроено, не помню, но в таких ситуациях уже надо получше знать как устроен стек, какие из него элементы когда требуется или не требуется удалить и т.д. Соответственно такого рода статьи все это описывают более глубоко.</p><p>Еще детальнее если захочется понимания - почитать как с метатаблицами Lua работать из Си-кода.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Fri, 23 Sep 2022 05:55:38 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3624#p3624</guid>
		</item>
		<item>
			<title><![CDATA[Re: lua_pushstring - что делает ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3622#p3622</link>
			<description><![CDATA[<p>Прочитал по двум Вашим ссылкам.<br />Не смог найти такую информацию: что происходит со стеком, после того, как функция в Си завешается и возвращает значение в Lua ? <br />Стек уничтожается или продолжает существовать ? Нужно ли его очищать ?</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Thu, 22 Sep 2022 18:01:37 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3622#p3622</guid>
		</item>
		<item>
			<title><![CDATA[Re: lua_pushstring - что делает ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3621#p3621</link>
			<description><![CDATA[<p>Дошел до описания:</p><div class="quotebox"><blockquote><p>Так, например, если стэк содержит 10 переменных, то return(2) вернет 9-ую и 10-ую переменную в Lua.</p></blockquote></div><p>Теперь понял, что return Lua, это не return Си.</p><p>Спасибо за ссылку.</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Thu, 22 Sep 2022 17:56:13 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3621#p3621</guid>
		</item>
		<item>
			<title><![CDATA[Re: lua_pushstring - что делает ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3620#p3620</link>
			<description><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Вероятно вы хотели сказать &quot;<em>а не возвращенный код <strong>1</strong>, который я возвращаю из функции TestFunc()</em>&quot;. Да?</p><p>Потому что, как я уже писал, функция forLua_TestFunc() возвращает <strong>количество</strong> возвращенных ею на стеке Lua значений ...</p></blockquote></div><p>Вот этот момент я никак не могу понять. Что значит &quot;функция forLua_TestFunc() возвращает <strong>количество</strong> возвращенных ею на стеке Lua значений&quot; ??<br />Функция в Cи, как я понимаю и в Lua - возвращает именно то, что указано в return, а в return я могу указать все что угодно - хоть 2, хоть 22.</p><br /><p>PS: Ваши ссылки уже читаю.</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Thu, 22 Sep 2022 17:50:29 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3620#p3620</guid>
		</item>
		<item>
			<title><![CDATA[Re: lua_pushstring - что делает ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3619#p3619</link>
			<description><![CDATA[<p>Я не знаю что вы читали, но я сдаюсь.<br />Давайте я кину пару ссылок, где вроде разжёвываются все концепции взаимодействия Lua и Си кода.<br />Как в общем объяснить сверх того, что там написано - я не знаю.</p><p>[url]https://smart-lab.ru/blog/611041.php[/url]<br />[url]https://bot4sale.ru/blog-menu/qlua/spisok-statej/308-c-api-lua.html[/url]</p><p>Надеюсь, эти материалы помогут вам понять суть и идею.</p><div class="quotebox"><cite>Serg_ пишет:</cite><blockquote><p>А когда выполняю message(tostring(status)) - то выводится &quot;Hello_1&quot;, а не возвращенный код 2, который я возвращаю из функции TestFunc().</p></blockquote></div><p>Вероятно вы хотели сказать &quot;<em>а не возвращенный код <strong>1</strong>, который я возвращаю из функции TestFunc()</em>&quot;. Да?</p><p>Потому что, как я уже писал, функция forLua_TestFunc() возвращает <strong>количество</strong> возвращенных ею на стеке Lua значений (в вашем случае одно значение, потому и return 1). А само значение, которое мы хотим вернуть, мы кладем на вершину стека Lua через вызов lua_pushstring. Причем поскольку это lua_push<strong>string</strong>, то возвращаем мы именно тип &quot;строка&quot;. Не число, не bool, ни что-либо другое. Именно строковый тип, строку.</p><p>Кстати, сам стек Lua (указатель на него) - это как раз та самая переменная L, которая вам всегда передаётся в Си-функции.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Thu, 22 Sep 2022 17:18:26 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3619#p3619</guid>
		</item>
		<item>
			<title><![CDATA[Re: lua_pushstring - что делает ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3618#p3618</link>
			<description><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Говоря кратко - lua_pushstring добавляет строковый параметр на стек, а return(1) говорит, что функция возвращает 1 параметр (функции в Lua могут не возвращать никакое значение, либо возвращать одно или несколько результирующих значений любых типов, не только один результат).</p></blockquote></div><p>Я вроде бы почитал, но все равно, что то &quot;недогоняю&quot;. Вот cкрипт:</p><div class="codebox"><pre><code>Quil_Lua_connector = require(&quot;Quil_Lua_connector&quot;)

status = Quil_Lua_connector.TestFunc(&quot;Hello_1&quot;, &quot;Hello_2&quot;)

message(tostring(status))
message(tostring(2))</code></pre></div><p>Почему когда я выполняю message(tostring(2)) - то выводится сообщение 2.<br />А когда выполняю message(tostring(status)) - то выводится &quot;Hello_1&quot;, а не возвращенный код 2, который я возвращаю из функции TestFunc().</p><p>Реально не могу понять.</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Thu, 22 Sep 2022 16:27:29 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3618#p3618</guid>
		</item>
		<item>
			<title><![CDATA[Re: lua_pushstring - что делает ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3615#p3615</link>
			<description><![CDATA[<p>Говоря кратко - lua_pushstring добавляет строковый параметр на стек, а return(1) говорит, что функция возвращает 1 параметр (функции в Lua могут не возвращать никакое значение, либо возвращать одно или несколько результирующих значений любых типов, не только один результат).</p><p>Еще раз обращусь к вам с просьбой: почитайте сначала статьи на тему взаимодействия Lua в С++ коде. Что такое стек в виртуальной машине Lua, как в него передаются / принимаются параметры, как там значения индексируются и т.д. А также посмотрите примеры на Си для Lua, которых в сети много, или минимальные примеры из демо-библиотеки на этом сайте: как там принимаются параметры, как возвращаются значения и т.д.<br />[url]https://quik2dde.ru/viewtopic.php?id=18[/url]</p><p>API там несложное, но все же его надо изучить.</p><p>Когда уже статьи будут прочитаны и по ходу применения знаний будут возникать предметные вопросы - тогда велкам.</p><p>А так получается на форуме надо написать статью по работе с Lua из Си именно для вас. Вряд ли кто-то возьмётся за такое <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, 21 Sep 2022 21:23:39 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3615#p3615</guid>
		</item>
		<item>
			<title><![CDATA[lua_pushstring - что делает ?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3612#p3612</link>
			<description><![CDATA[<p>Позвольте задать вопрос.</p><p>Читаю описание к Push-функциям: [url]https://www.lua.org/pil/24.2.1.html[/url]</p><p>Push-функции помещают значение в некий виртуальный стек.</p><p>Но меня интересует вопрос немного другой.</p><p>Почему, когда при запуске скрипта Quik Lua:</p><div class="codebox"><pre><code>Quil_Lua_connector = require(&quot;Quil_Lua_connector&quot;)
message(Quil_Lua_connector.TestFunc())</code></pre></div><p>вызывается функция из Си:</p><div class="codebox"><pre><code>static int forLua_TestFunc(lua_State* L) 
{
    lua_pushstring(L, &quot;Привет из C/C++&quot;);
    return(1);
}</code></pre></div><br /><p>То результатом является появление инфобокса в Quik`е c надписью &quot;Привет из C/C++&quot; - ведь возвращенное значение 0 это int &quot;return 1&quot; - то есть message(1) - почему выводится текст, который как бы был помещен в стек.</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Wed, 21 Sep 2022 17:39:49 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3612#p3612</guid>
		</item>
	</channel>
</rss>
