<?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 функций из C++]]></title>
		<link>https://quik2dde.ru/viewtopic.php?id=404</link>
		<atom:link href="https://quik2dde.ru/extern.php?action=feed&amp;tid=404&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Что то непонятно с вызовом Lua функций из C++».]]></description>
		<lastBuildDate>Thu, 06 Oct 2022 06:30:45 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Что то непонятно с вызовом Lua функций из C++]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3771#p3771</link>
			<description><![CDATA[<p>Кстати, документация переведена и на русский. Правда только документация<br />[url]http://lua.org.ru/contents_ru.html[/url]</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Thu, 06 Oct 2022 06:30:45 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3771#p3771</guid>
		</item>
		<item>
			<title><![CDATA[Re: Что то непонятно с вызовом Lua функций из C++]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3770#p3770</link>
			<description><![CDATA[<p>Если кратко ответить на ваши вопросы, то все так, как написано в документации.<br />[url]https://www.lua.org/pil/25.2.html[/url]</p><p>1) Потому что вторым аргументом <strong>lua_pcal</strong> передается количество аргументов функции, а не количество элементов стека. Это прямо написано в документации:<br /></p><div class="quotebox"><blockquote><p>You call <strong>lua_pcal</strong>l with the <strong><span class="bbu">number of arguments</span> you are passing</strong></p></blockquote></div><p>2) Потому что так задумана и описана в документации работа функции <strong>lua_pcal</strong>:<br /></p><div class="quotebox"><blockquote><p>Before pushing the results, <span class="bbu"><strong>lua_pcall removes</strong> from the stack the <strong>function</strong> and <strong>its arguments</strong></span>.</p></blockquote></div><p>Т.е. <strong>lua_pcall</strong> удалит из стека функцию и переданные в нее аргументы перед возвратом, на стеке останутся только результаты (если они возвращены).</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Thu, 06 Oct 2022 06:26:55 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3770#p3770</guid>
		</item>
		<item>
			<title><![CDATA[Что то непонятно с вызовом Lua функций из C++]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3767#p3767</link>
			<description><![CDATA[<p>Подскажите пожалуйста, что то я вдруг понял, что не понял, как вызывается Lua функция из C++.</p><br /><p>Предположим вот есть такой скрипт в Квике:</p><br /><div class="codebox"><pre><code>function my_func_Lua(msg)

message(msg)

end</code></pre></div><br /><p>В С++ такой код:</p><div class="codebox"><pre><code>static int forLua_my_func_TEST(lua_State* L)
{

    int size_stack = lua_gettop(L);
    std::cout &lt;&lt; &quot;size_1:&quot; &lt;&lt; size_stack &lt;&lt; std::endl;    //0

    lua_getglobal(L, &quot;my_func_Lua&quot;);

    int size_stack = lua_gettop(L);
    std::cout &lt;&lt; &quot;size_2:&quot; &lt;&lt; size_stack &lt;&lt; std::endl;   //1

    lua_pushstring(L, &quot;1&quot;);

    int size_stack = lua_gettop(L);
    std::cout &lt;&lt; &quot;size_3:&quot; &lt;&lt; size_stack &lt;&lt; std::endl;   //2

    int status = lua_pcall(L, 1, 0, 0);

    int size_stack = lua_gettop(L);
    std::cout &lt;&lt; &quot;size_4:&quot; &lt;&lt; size_stack &lt;&lt; std::endl;  //0
    
        return 0;
}</code></pre></div><p>1)А теперь вопрос: почему этот код сработал ?<br />Ведь в lua_pcall - я указал только один аргумент, а по факту их два: это сама функция, которая добавилась на стек вызовов lua_getglobal и второй аргумент строка &quot;1&quot;.</p><p>Но это сработало и функция my_func_Lua - вызвалась и вывело переданное значение.</p><p>2)Почему после вызова lua_pcall - размер стека - стал равен нулю, если после вызова lua_pcall - должен удалять аргумента со стека в кол-ве указанных в функции lua_pcall&nbsp; переданных аргументов ? Теоретически - размер стека должен был стать - 1 - где этот один - это функция my_func_Lua.</p><br /><p>Что то не понятно совсем.</p>]]></description>
			<author><![CDATA[null@example.com (Serg_)]]></author>
			<pubDate>Wed, 05 Oct 2022 18:27:19 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3767#p3767</guid>
		</item>
	</channel>
</rss>
