<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[QUIK -> DDE &mdash; Что то непонятно с вызовом Lua функций из C++]]></title>
	<link rel="self" href="https://quik2dde.ru/extern.php?action=feed&amp;tid=404&amp;type=atom" />
	<updated>2022-10-06T06:30:45Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=404</id>
		<entry>
			<title type="html"><![CDATA[Re: Что то непонятно с вызовом Lua функций из C++]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3771#p3771" />
			<content type="html"><![CDATA[<p>Кстати, документация переведена и на русский. Правда только документация<br />[url]http://lua.org.ru/contents_ru.html[/url]</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2022-10-06T06:30:45Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3771#p3771</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Что то непонятно с вызовом Lua функций из C++]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3770#p3770" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2022-10-06T06:26:55Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3770#p3770</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Что то непонятно с вызовом Lua функций из C++]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3767#p3767" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Serg_]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3371</uri>
			</author>
			<updated>2022-10-05T18:27:19Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3767#p3767</id>
		</entry>
</feed>
