<?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; Можно ли подсунуть свою функцию C++ как main функцию скрипта lua?]]></title>
		<link>https://quik2dde.ru/viewtopic.php?id=143</link>
		<atom:link href="https://quik2dde.ru/extern.php?action=feed&amp;tid=143&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Можно ли подсунуть свою функцию C++ как main функцию скрипта lua?».]]></description>
		<lastBuildDate>Mon, 16 Mar 2015 19:41:02 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Можно ли подсунуть свою функцию C++ как main функцию скрипта lua?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1134#p1134</link>
			<description><![CDATA[<p>Да, всё получилось! Если функцию зарегистрировать в глобальных, то она будет вызываться КВИКом как колбэк, в случае совпадения идентификатора конечно! <br />Круто! :)</p><p>Кому интересно вот экспериментальный код:<br /></p><div class="codebox"><pre><code>//Функция бросает сообщение в КВИКе, её будем регистрировать как main
static int forLua_LuaMessage(lua_State* L){
    lua_getglobal(L, &quot;message&quot;);
    lua_pushfstring(L, &quot;Main!&quot;);
    lua_pcall(L, 1, 0, 0);

    return 0;
}

...


extern &quot;C&quot; LUALIB_API int luaopen_testQUIKCOnnector(lua_State* L) {
    luaL_openlib(L, &quot;testQUIKCOnnector&quot;, ls_lib, 0);
    
    //Заталкиваем функцию в стек
    lua_pushcclosure(L, forLua_LuaMessage, 0);
    //Регистрируем её как колбэк на main
    lua_setfield(L, LUA_GLOBALSINDEX, &quot;main&quot;);
     
    return 0;
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (xpoftik)]]></author>
			<pubDate>Mon, 16 Mar 2015 19:41:02 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1134#p1134</guid>
		</item>
		<item>
			<title><![CDATA[Re: Можно ли подсунуть свою функцию C++ как main функцию скрипта lua?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1133#p1133</link>
			<description><![CDATA[<p>-</p>]]></description>
			<author><![CDATA[null@example.com (sam063rus)]]></author>
			<pubDate>Mon, 16 Mar 2015 19:03:41 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1133#p1133</guid>
		</item>
		<item>
			<title><![CDATA[Re: Можно ли подсунуть свою функцию C++ как main функцию скрипта lua?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1132#p1132</link>
			<description><![CDATA[<p>-</p>]]></description>
			<author><![CDATA[null@example.com (sam063rus)]]></author>
			<pubDate>Mon, 16 Mar 2015 19:01:30 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1132#p1132</guid>
		</item>
		<item>
			<title><![CDATA[Re: Можно ли подсунуть свою функцию C++ как main функцию скрипта lua?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1131#p1131</link>
			<description><![CDATA[<div class="quotebox"><cite>sam063rus пишет:</cite><blockquote><p>это не то - я не про это<br />тот файл, что нам нужен - называется у Морошкина: QScalpAgent.dll. там, в основном, всё написано, что вас интересует.</p><p>для начала, вот ещё посмотрите: [url]http://forum.quik.ru/messages/forum10/message1501/topic212/#message1501[/url]</p></blockquote></div><p>Перед тем как писать сюда прочитал всю эту тему. Ок, еще раз подробнее посмотрю на pushcclosure().</p>]]></description>
			<author><![CDATA[null@example.com (xpoftik)]]></author>
			<pubDate>Mon, 16 Mar 2015 18:55:58 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1131#p1131</guid>
		</item>
		<item>
			<title><![CDATA[Re: Можно ли подсунуть свою функцию C++ как main функцию скрипта lua?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1130#p1130</link>
			<description><![CDATA[<div class="quotebox"><cite>sam063rus пишет:</cite><blockquote><p>это не то - я не про это<br />тот файл, что нам нужен - называется у Морошкина: QScalpAgent.dll. там, в основном, всё написано, что вас интересует.</p></blockquote></div><p>А! Так, этот файл же на плюсах написан, к сожалению как его декомпилить я не знаю, т.к. с C++ как не довелось познакомиться настолько близко. Прошелся только по нему Dependency walker&#039;ом, как и ожидал увидел там luaopen_QScalpAgent() и всё.</p>]]></description>
			<author><![CDATA[null@example.com (xpoftik)]]></author>
			<pubDate>Mon, 16 Mar 2015 18:54:38 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1130#p1130</guid>
		</item>
		<item>
			<title><![CDATA[Re: Можно ли подсунуть свою функцию C++ как main функцию скрипта lua?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1129#p1129</link>
			<description><![CDATA[<p>-</p>]]></description>
			<author><![CDATA[null@example.com (sam063rus)]]></author>
			<pubDate>Mon, 16 Mar 2015 18:48:01 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1129#p1129</guid>
		</item>
		<item>
			<title><![CDATA[Re: Можно ли подсунуть свою функцию C++ как main функцию скрипта lua?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1128#p1128</link>
			<description><![CDATA[<p>А вот он!<br /></p><div class="codebox"><pre><code>-----------------------------------------------------------------------------
--  QScalpAgent for QUIK (c) 2014 Nikolay Moroshkin, http://www.qscalp.ru  --
-----------------------------------------------------------------------------

AgentName = &quot;QScalpAgent&quot;

CommandBuffer = 4096

SecListBuffer = 4096
AccListBuffer = 4096
HistoryBuffer = 262144

MaxStockDepth = 170
DealsQueueDepth = 4519
AuxInfoQueueDepth = 85

TraderBuffer = 4096
TraderQueueDepth = 520

StopOrderExpire = &quot;TODAY&quot;

LogAppend = false

CList = { &quot;CETS&quot;, &quot;FEC&quot;, &quot;FEE&quot;, &quot;FEF&quot;, &quot;FEG&quot;, &quot;FEM&quot;, &quot;FEN&quot;, &quot;FEO&quot;,
  &quot;FEP&quot;, &quot;FEV&quot;, &quot;FEX&quot;, &quot;FUTUX&quot;, &quot;GTS&quot;, &quot;GTSST&quot;, &quot;INDX&quot;, &quot;QJSIM&quot;,
  &quot;RTSIDX&quot;, &quot;RTSIND&quot;, &quot;SPBFUT&quot;, &quot;TQBR&quot;, &quot;UCED&quot;, &quot;UCRTS&quot;, &quot;UCSI&quot; }

-----------------------------------------------------------------------------

package.path = &quot;&quot;
package.cpath = getScriptPath() .. &quot;\\&quot; .. AgentName .. &quot;.dll&quot;

require(AgentName)

-----------------------------------------------------------------------------</code></pre></div><p>Так, то что это колбэк это стало понятно, теперь вопрос, как подписаться на этот колбек в C++ dll?</p>]]></description>
			<author><![CDATA[null@example.com (xpoftik)]]></author>
			<pubDate>Mon, 16 Mar 2015 18:37:20 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1128#p1128</guid>
		</item>
		<item>
			<title><![CDATA[Re: Можно ли подсунуть свою функцию C++ как main функцию скрипта lua?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1127#p1127</link>
			<description><![CDATA[<p>-</p>]]></description>
			<author><![CDATA[null@example.com (sam063rus)]]></author>
			<pubDate>Mon, 16 Mar 2015 18:31:56 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1127#p1127</guid>
		</item>
		<item>
			<title><![CDATA[Можно ли подсунуть свою функцию C++ как main функцию скрипта lua?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=1126#p1126</link>
			<description><![CDATA[<p>Сразу извиняюсь за может несколько расплывчатую формулировку, но вся соль вот в чем:</p><p>Если посмотреть на коннектор к КВИКу QScalp&#039;а то видим там последней строчкой код: </p><div class="codebox"><pre><code>...

require(AgentName)</code></pre></div><p>Как видно функция main напрочь отсутствует, никаких конструкций типа: </p><div class="codebox"><pre><code>is_run = true;

function main()

while is_run do
    sleep(100)
end

end

function onClose(signal)

   is_run = false

end</code></pre></div><p>однако когда жмём кнопку запустить получаем сообщение &quot;QScalpAgent успешно запущен&quot; и скрипт остается помеченным как запущенный. </p><p><strong>Вопрос, как добиться такого результата на чистом C API?</strong></p><p>Как сказано в документации, скрипт остается помеченным пока выполняется в метод main, приходят на ум 2 варианта:<br />1. Каким то образом на C API была написана функция которую &quot;подсунули&quot; как метод main;<br />2. Как то был перехвачен поток выполнения в котором выполняется main и уже он поставлен в ожидание;</p><p>PS: Обмолвлюсь сразу, что ничего не имею против варианта с кусочком кода на lua, но знать и понимать хочется все тонкости.</p>]]></description>
			<author><![CDATA[null@example.com (xpoftik)]]></author>
			<pubDate>Mon, 16 Mar 2015 17:21:50 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=1126#p1126</guid>
		</item>
	</channel>
</rss>
