<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум Guardant &mdash; Незадача с GrdLogin]]></title>
	<link rel="self" href="https://forum.guardant.ru/feed/atom/topic/313/" />
	<updated>2013-05-13T13:37:16Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.guardant.ru/topic/313/</id>
		<entry>
			<title type="html"><![CDATA[Re: Незадача с GrdLogin]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/1517/#p1517" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Ошибка GrdE_InvalidHandle, скорее всего, происходит из-за того, что в некоторых языках программирования, периодически уничтожаются неиспользуемые объекты и передвигаются используемые, для уплотнения памяти (т. н. garbage collecting). В результате, происходит передвижение хэндла в памяти, в то время как hGrd указывает на старую область памяти.</p></blockquote></div><p>Странно. Казалось бы, чистые &quot;плюсы&quot;, unmanaged код... По крайней мере в этом модуле.</p><div class="quotebox"><blockquote><p>Для того чтобы избежать данной проблемы, необходимо первым параметром функции GrdCreateHandle указывать null.</p></blockquote></div><p>Спасибо, помогло...</p><p>Хотя... Разница у приложений как раз в том, что &quot;старое&quot; практически полностью unmanaged, с небольшими вставками на C#, а &quot;новое&quot; - наоборот, пускалка (и бОльшая часть кода) на C# - т.е. managed и как раз для работы с ключиком пускается unmanaged кусочек.</p>]]></content>
			<author>
				<name><![CDATA[Виктор Блинов]]></name>
				<uri>https://forum.guardant.ru/user/16/</uri>
			</author>
			<updated>2013-05-13T13:37:16Z</updated>
			<id>https://forum.guardant.ru/post/1517/#p1517</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Незадача с GrdLogin]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/1515/#p1515" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Виктор Блинов пишет:</cite><blockquote><p>возвращает 48 - т.е. GrdE_InvalidHandle</p></blockquote></div><p>Ошибка GrdE_InvalidHandle, скорее всего, происходит из-за того, что в некоторых языках программирования, периодически уничтожаются неиспользуемые объекты и передвигаются используемые, для уплотнения памяти (т. н. garbage collecting). В результате, происходит передвижение хэндла в памяти, в то время как hGrd указывает на старую область памяти.</p><p>Для того чтобы избежать данной проблемы, необходимо первым параметром функции GrdCreateHandle указывать null. В таком случае функция сама выделит память для хэндла, и он попадет в неуправляемую область памяти, и не будет подвержен действию сборщика мусора.</p>]]></content>
			<author>
				<name><![CDATA[Антон Тихиенко]]></name>
				<uri>https://forum.guardant.ru/user/31/</uri>
			</author>
			<updated>2013-05-13T12:48:56Z</updated>
			<id>https://forum.guardant.ru/post/1515/#p1515</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Незадача с GrdLogin]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/1513/#p1513" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Верно ли то, что при прочих равных условиях (версия операционной системы, версия Guardant API (какая версия API используется?) и т.д.), два абсолютно одинаковых приложения ведут себя по разному (описанным образом)?</p></blockquote></div><p>Да, именно так.</p><div class="quotebox"><blockquote><p>какая версия API используется?</p></blockquote></div><p>Поставил за выходные 6.2 от декабря 2012 и GrdAPI32.lib и *.cpp и *.h</p><p>Теперь другая незадача...</p><div class="codebox"><pre><code>    Mode = Local ? GrdFMR_Local : GrdFMR_Remote;
    int ret = InitDongle();
    if (ret != GrdE_OK)
        return ret;

    ret = GrdDongle.SetFindMode(Mode, 0, 0, 0, 0, 0, 0, GrdFMM_ALL, GrdFMI_ALL);</code></pre></div><p>возвращает 48 - т.е. GrdE_InvalidHandle</p>]]></content>
			<author>
				<name><![CDATA[Виктор Блинов]]></name>
				<uri>https://forum.guardant.ru/user/16/</uri>
			</author>
			<updated>2013-05-13T12:42:16Z</updated>
			<id>https://forum.guardant.ru/post/1513/#p1513</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Незадача с GrdLogin]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/1511/#p1511" />
			<content type="html"><![CDATA[<p>Здравствуйте.<br /></p><div class="quotebox"><cite>Виктор Блинов пишет:</cite><blockquote><p>В разрабатываемом приложении начал приделывать работу с ключиком.<br />Весь код просто скопировал один в один из работающего.<br />И выяснилась странная вещь:<br />вызов <strong>GrdLogin( m_hGrd, dwModuleLMS, dwLoginFlags );</strong> результат выдаёт нормальный, всё у него казалось бы хорошо, <br />но при этом <em><strong>после вызова </strong></em>меняются значения: m_hGrd превращается в NULL и m_dwRemoteMode == 0</p><p>Повторюсь, текст модулей на C++ один и тот же, но в одном приложении таких чудес не случается, а во втором - всегда...<br />Тестировал на XP x32 и Windows 7 x64</p></blockquote></div><p>Верно ли то, что при прочих равных условиях (версия операционной системы, версия Guardant API (<span class="bbu">какая версия API используется?</span>) и т.д.), два абсолютно одинаковых приложения ведут себя по разному (описанным образом)?</p><p>Что за параметр (переменная) <strong>m_dwRemoteMode</strong>? В <strong>GrdLogin</strong> таких параметров нет (что видно и из Вашего описания тоже).</p><p>Воспроизводится ли указанная проблема на нашем стандартном примере для Guardant API ((все примеры можно найти в папке &quot;Samples&quot; установленного комплекта разработчика, директория по умолчанию: &quot; %Program Files%\Guardant\Guardant 6\%Public Code%\Samples\&quot;))?</p>]]></content>
			<author>
				<name><![CDATA[Антон Тихиенко]]></name>
				<uri>https://forum.guardant.ru/user/31/</uri>
			</author>
			<updated>2013-05-13T09:12:23Z</updated>
			<id>https://forum.guardant.ru/post/1511/#p1511</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Незадача с GrdLogin]]></title>
			<link rel="alternate" href="https://forum.guardant.ru/post/1507/#p1507" />
			<content type="html"><![CDATA[<p>В разрабатываемом приложении начал приделывать работу с ключиком.<br />Весь код просто скопировал один в один из работающего.<br />И выяснилась странная вещь:<br />вызов <strong>GrdLogin( m_hGrd, dwModuleLMS, dwLoginFlags );</strong> результат выдаёт нормальный, всё у него казалось бы хорошо, <br />но при этом <em><strong>после вызова </strong></em>меняются значения: m_hGrd превращается в NULL и m_dwRemoteMode == 0</p><p>Повторюсь, текст модулей на C++ один и тот же, но в одном приложении таких чудес не случается, а во втором - всегда...<br />Тестировал на XP x32 и Windows 7 x64</p>]]></content>
			<author>
				<name><![CDATA[Виктор Блинов]]></name>
				<uri>https://forum.guardant.ru/user/16/</uri>
			</author>
			<updated>2013-05-12T10:19:36Z</updated>
			<id>https://forum.guardant.ru/post/1507/#p1507</id>
		</entry>
</feed>
