<?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=107&amp;type=atom" />
	<updated>2016-12-08T00:59:34Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=107</id>
		<entry>
			<title type="html"><![CDATA[Re: Lua - Вызвать метод таблицы из C++]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2055#p2055" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Хочу вызвать метод ds:O(99). Не могу понять как это сделать. Подскажите.</p></blockquote></div><br /><p>Как вариант (даже более чем).</p><div class="codebox"><pre><code>// C++

// ds=nil;
lua_settop(L,0);
lua_pushnil(L);
lua_setglobal(L,&quot;ds&quot;);

// ds=CreateDataSource(&quot;TQBR&quot;,&quot;ROSN&quot;,&quot;5&quot;);
lua_getfield(L, LUA_GLOBALSINDEX, &quot;CreateDataSource&quot;);
lua_pushstring(L, &quot;TQBR&quot;);
lua_pushstring(L, &quot;ROSN&quot;);
lua_pushinteger(L, 5);
lua_pcall(L, 3, 1, 0);
if (lua_istable(L, -1)) {
   lua_setglobal(L,&quot;ds&quot;);
   };

//  !!!!!! со стека не снимаем значение перед вызовом &quot;метода&quot; !!!!!!!

//помещаем на стек значение ds 
lua_getglobal(L, &quot;ds&quot;);

// ds:O(99);
lua_pushstring(L, &quot;O&quot;);
lua_rawget(L, -2);
lua_pushvalue(L, -2);
lua_pushnumber(L, 99);
lua_pcall(L, 2, 1, 0);
double open = lua_tonumber(L, -1);
lua_pop(L, 1);</code></pre></div><p>В переменной <strong>open</strong> лежит значение по индексу&nbsp; <strong>99</strong> вызываемое функцией <strong>O()</strong> ;</p>]]></content>
			<author>
				<name><![CDATA[art]]></name>
				<uri>https://quik2dde.ru/profile.php?id=389</uri>
			</author>
			<updated>2016-12-08T00:59:34Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2055#p2055</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Lua - Вызвать метод таблицы из C++]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=670#p670" />
			<content type="html"><![CDATA[<p>Хочу вызвать метод ds:O(99). Не могу понять как это сделать. Подскажите.</p><div class="codebox"><pre><code>#
# Исполняем функцию CreateDataSource()
#
lua_getfield(lua, LUA_GLOBALSINDEX, &quot;CreateDataSource&quot;);
lua_pushstring(lua, &quot;TQBR&quot;);
lua_pushstring(lua, &quot;ROSN&quot;);
lua_pushnumber(lua, 5); // 5-минутки
lua_call(lua, 3, 2);
lua_pop(lua, 1);
#
# Далее пробуем вызвать медок ds:O(99)
#
lua_getfield(lua, -1, &quot;DS&quot;); // создаем указатель на таблицу
lua_getfield(lua, -2, &quot;O&quot;); // получаем указатель на функцию ds:О()
lua_pushinteger(lua, 99); // загоняем в стек номер свечи
lua_insert(lua, -2);
lua_call(lua, 1, 1);
double Res = (double)lua_tonumber(lua, -1); // Получаем значение открытия свечи
lua_pop(lua, 1);</code></pre></div><p>В результате Res = 1000.</p>]]></content>
			<author>
				<name><![CDATA[NiKO]]></name>
				<uri>https://quik2dde.ru/profile.php?id=211</uri>
			</author>
			<updated>2014-09-25T08:51:33Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=670#p670</id>
		</entry>
</feed>
