<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[QUIK -> DDE &mdash; Можно ли вывести в консоль из C++ библиотеки?]]></title>
	<link rel="self" href="https://quik2dde.ru/extern.php?action=feed&amp;tid=384&amp;type=atom" />
	<updated>2022-10-04T17:02:52Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=384</id>
		<entry>
			<title type="html"><![CDATA[Re: Можно ли вывести в консоль из C++ библиотеки?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3735#p3735" />
			<content type="html"><![CDATA[<p>Вот так:<br /></p><div class="codebox"><pre><code>#include &lt;Windows.h&gt;


    //----------------------------------------------
    AllocConsole();
    freopen(&quot;CONOUT$&quot;, &quot;w&quot;, stdout);
    //----------------------------------------------

    std::cout &lt;&lt; &quot;CHECK&quot; &lt;&lt; std::endl;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Serg_]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3371</uri>
			</author>
			<updated>2022-10-04T17:02:52Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3735#p3735</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Можно ли вывести в консоль из C++ библиотеки?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3721#p3721" />
			<content type="html"><![CDATA[<p><strong>Serg_</strong>, я ведь правильно понимаю (по другим темам), что вам удалось отобразить консоль из dll?<br />Поделитесь кодом, необходимым для этого.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2022-10-04T08:40:30Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3721#p3721</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Можно ли вывести в консоль из C++ библиотеки?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3614#p3614" />
			<content type="html"><![CDATA[<p>Понял, спасибо!</p>]]></content>
			<author>
				<name><![CDATA[Serg_]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3371</uri>
			</author>
			<updated>2022-09-21T18:22:04Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3614#p3614</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Можно ли вывести в консоль из C++ библиотеки?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3613#p3613" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Serg_ пишет:</cite><blockquote><p>Я просто не пойму - это рекомендация, как то связано со спецификой Lua или</p></blockquote></div><p>Рекомендация связана с напоминанием о том, что в рамках Lua-Quik функции в такой dll могут вызываться из разных потоков одновременно. Что надо сразу учитывать при ее проектировании.<br />и это есть специфика ее применения именно в рамках Lua-Quik.</p><p>Если же эту dll вы будете применять в рамках другого какого-то интерпретатора Lua (не в рамках QUIK), то вероятнее всего никакой многопоточности там не будет.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2022-09-21T18:15:15Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3613#p3613</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Можно ли вывести в консоль из C++ библиотеки?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3611#p3611" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p><strong>Serg_</strong>,<br />вы описали в довольно общих словах, а потому давать какой-то точный однозначный ответ мне бы не хотелось. Впрочем, вникать в детали вашей задумки и подробно расспрашивать - наверное тоже.</p><p>Рекомендация простая: обращения к объектам, к которым может быть одновременный доступ из нескольких потоков, надо защищать объектами синхронизации.</p><p>Как минимум в вашем описании это объект&nbsp; std::deque, но про него вы и так уже пишете.</p></blockquote></div><p>Я просто не пойму - это рекомендация, как то связано со спецификой Lua или Вы даете рекомендацию по программированию С++ ? <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></content>
			<author>
				<name><![CDATA[Serg_]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3371</uri>
			</author>
			<updated>2022-09-21T17:25:41Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3611#p3611</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Можно ли вывести в консоль из C++ библиотеки?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3610#p3610" />
			<content type="html"><![CDATA[<p><strong>Serg_</strong>,<br />вы описали в довольно общих словах, а потому давать какой-то точный однозначный ответ мне бы не хотелось. Впрочем, вникать в детали вашей задумки и подробно расспрашивать - наверное тоже.</p><p>Рекомендация простая: обращения к объектам, к которым может быть одновременный доступ из нескольких потоков, надо защищать объектами синхронизации.</p><p>Как минимум в вашем описании это объект&nbsp; std::deque, но про него вы и так уже пишете.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2022-09-21T17:20:54Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3610#p3610</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Можно ли вывести в консоль из C++ библиотеки?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3608#p3608" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Внутри C++ кода никто и ни в чем вас не ограничивает <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /><br />Не забывайте только про потенциально возможный вызов функций вашей библиотеки из разных потоков, если в C++ коде будут какие-то глобальные переменные / хранилища. Например, если будете вызывать функции вашей библиотеки из call-back&#039;ов и main() - то как раз возникнет одновременный вызов из разных потоков.</p></blockquote></div><p>Не совсем понял эту мысль. </p><p>Если не сложно, можете объяснить на таком просто примере: предположим я использую блокирующие сокеты на пуле потоков.<br />Предположим из Lua я передал данные и они пришли в dll, я их записываю в очередь std::deque, сам std::deque под мьютексом, если какой то поток из пула потоков свободен я вызываю функцию send().<br />Какая тут может быть потенциальная проблема ?</p>]]></content>
			<author>
				<name><![CDATA[Serg_]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3371</uri>
			</author>
			<updated>2022-09-21T13:47:19Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3608#p3608</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Можно ли вывести в консоль из C++ библиотеки?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3607#p3607" />
			<content type="html"><![CDATA[<p>Внутри C++ кода никто и ни в чем вас не ограничивает <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /><br />Не забывайте только про потенциально возможный вызов функций вашей библиотеки из разных потоков, если в C++ коде будут какие-то глобальные переменные / хранилища. Например, если будете вызывать функции вашей библиотеки из call-back&#039;ов и main() - то как раз возникнет одновременный вызов из разных потоков.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2022-09-21T13:39:23Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3607#p3607</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Можно ли вывести в консоль из C++ библиотеки?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3606#p3606" />
			<content type="html"><![CDATA[<p>А действительно работает да, Спасибо!</p><p>Получается, можно сделать такую простую вещь: просто из Lua передавать данные в dll, а в dll уже подключить к примеру boost asio и просто передавать эти данные на какой нибудь локальный порт, а в самом приложении уже подключить сервер boost asio и принимать эти данные ? Чтобы не мучатся с Luasocket и тому подобному.</p>]]></content>
			<author>
				<name><![CDATA[Serg_]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3371</uri>
			</author>
			<updated>2022-09-21T13:26:51Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3606#p3606</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Можно ли вывести в консоль из C++ библиотеки?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3605#p3605" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Serg_ пишет:</cite><blockquote><p>Функция сама вызывается, но код С/С++ - не выполняется.</p></blockquote></div><p>Что значит &quot;<em>код С/С++ - не выполняется</em>&quot;?</p><p>Если вы в Lua-скрипте напишете<br /></p><div class="codebox"><pre><code>message(lua_dll_x64_name.TestFunc())</code></pre></div><p>то у вас отобразится в QUIK окно с сообщением &quot;Привет из C/C++&quot;, так?<br />Значит код С/С++ выполняется, значение из функции, расположенной в dll, в Lua передается.</p><p>Но консоли-то у вас нет в случае dll-библиотеки, она просто не создана, вот вы и не видите как и что в нее выводится.</p><p>Удобнее вместо консоли будет писать в файл из С++ кода (этакий лог).</p><p>Еще удобно использовать функцию OutputDebugString (это WinAPI функция)<br />Каким инструментом просматривать результат её работы написано в этой теме [url]https://quik2dde.ru/viewtopic.php?id=108[/url] (там про применение в Lua-скриптах, но суть от этого не меняется, представление как работать с результатами этой функции та тема даёт).</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2022-09-21T12:54:10Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3605#p3605</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Можно ли вывести в консоль из C++ библиотеки?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3604#p3604" />
			<content type="html"><![CDATA[<p>Подскажите пожалуйста, а из скрипта Lua в итоге можно вызывать С или С++ код в dll ?<br />Я попробовал в тестовой функции вызвать просто вывод на консоль:</p><p>//=== Реализация функций, вызываемых из LUA ====================================================================//<br /></p><div class="codebox"><pre><code>static int forLua_TestFunc(lua_State* L) 
{
    printf(&quot;Hello, World!&quot;);
    std::cout&lt;&lt; &quot;Hello, World!&quot;&lt;&lt;std::endl;

    lua_pushstring(L, &quot;Привет из C/C++&quot;);
    return(1);
}</code></pre></div><p>Функция сама вызывается, но код С/С++ - не выполняется.</p>]]></content>
			<author>
				<name><![CDATA[Serg_]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3371</uri>
			</author>
			<updated>2022-09-21T12:19:57Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3604#p3604</id>
		</entry>
</feed>
