<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум Guardant &mdash; Падение программы на вызове GrdUnInitializeNotificationAPI]]></title>
		<link>https://forum.guardant.ru/topic/872/</link>
		<atom:link href="https://forum.guardant.ru/feed/rss/topic/872" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Падение программы на вызове GrdUnInitializeNotificationAPI».]]></description>
		<lastBuildDate>Thu, 30 Jan 2020 06:18:51 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Падение программы на вызове GrdUnInitializeNotificationAPI]]></title>
			<link>https://forum.guardant.ru/post/4285/#p4285</link>
			<description><![CDATA[<div class="quotebox"><cite>Coxwain пишет:</cite><blockquote><p>Выяснил причину падения описанного в первом посте, она заключается в утечке памяти при вызове функции GrdCreateHandle(), когда в качестве первого параметра передается NULL. По факту функция GrdCloseHandle() не отчищает выделенную память защищенного контейнера. Ошибку удалось устранить передавая в качестве первого параметра в функцию GrdCreateHandle() не NULL, а заранее выделенный буфер данных типа BYTE размером GrdContainerSize.</p></blockquote></div><p>Проверили у себя с SDK 7 Update 6 — утечки нет.<br />При тестировании вы точно собирали приложение с API из SDK 7 Update 6?<br />Или подключались библиотеки\объекнтые файлы из предыдущих версий?</p>]]></description>
			<author><![CDATA[null@example.com (Антон Тихиенко)]]></author>
			<pubDate>Thu, 30 Jan 2020 06:18:51 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/4285/#p4285</guid>
		</item>
		<item>
			<title><![CDATA[Re: Падение программы на вызове GrdUnInitializeNotificationAPI]]></title>
			<link>https://forum.guardant.ru/post/4280/#p4280</link>
			<description><![CDATA[<p>Выяснил причину падения описанного в первом посте, она заключается в утечке памяти при вызове функции GrdCreateHandle(), когда в качестве первого параметра передается NULL. По факту функция GrdCloseHandle() не отчищает выделенную память защищенного контейнера. Ошибку удалось устранить передавая в качестве первого параметра в функцию GrdCreateHandle() не NULL, а заранее выделенный буфер данных типа BYTE размером GrdContainerSize.</p>]]></description>
			<author><![CDATA[null@example.com (Coxwain)]]></author>
			<pubDate>Tue, 28 Jan 2020 06:07:36 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/4280/#p4280</guid>
		</item>
		<item>
			<title><![CDATA[Re: Падение программы на вызове GrdUnInitializeNotificationAPI]]></title>
			<link>https://forum.guardant.ru/post/4235/#p4235</link>
			<description><![CDATA[<p>Здравствуйте, спасибо! Выключение notification api в конструкторе помогло.</p>]]></description>
			<author><![CDATA[null@example.com (ls)]]></author>
			<pubDate>Wed, 13 Nov 2019 08:27:46 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/4235/#p4235</guid>
		</item>
		<item>
			<title><![CDATA[Re: Падение программы на вызове GrdUnInitializeNotificationAPI]]></title>
			<link>https://forum.guardant.ru/post/4234/#p4234</link>
			<description><![CDATA[<div class="quotebox"><cite>ls пишет:</cite><blockquote><p>Добрый день! У нас похожая проблема. Только ключ удаленный, при отключении локального компьютера от сети GrdCheck возвращает ошибку (конкретно, GrdE_NetConnectionLost), далее мы удаляем объект CGrdDongle, в деструкторе вызывается ::GrdCloseHandle(m_hGrd), на ней происходит вылет. Последняя функция в стеке вызовов GrdUnInitializeNotificationAPI (кроме этого в стеке видно вызов GrdLogout, перед ней GrdUnInitializeNotificationAPI и после нее еще 3).<br />Библиотеки взяты из Guardant SDK 7 update 6.<br />Есть скриншот, но не удалось загрузить на форум.</p></blockquote></div><p>Добрый день. Приносим извинения за длительное ожидание ответа.<br />Необходимо проанализировать сетевое notification api. Мы передали информацию в наш отдел разработки. Если используется класс CGrdDongle, то в его конструкторе использование этого api можно выключить.</p>]]></description>
			<author><![CDATA[null@example.com (Тимофей Ершов)]]></author>
			<pubDate>Wed, 13 Nov 2019 07:42:41 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/4234/#p4234</guid>
		</item>
		<item>
			<title><![CDATA[Re: Падение программы на вызове GrdUnInitializeNotificationAPI]]></title>
			<link>https://forum.guardant.ru/post/4231/#p4231</link>
			<description><![CDATA[<p>Добрый день! У нас похожая проблема. Только ключ удаленный, при отключении локального компьютера от сети GrdCheck возвращает ошибку (конкретно, GrdE_NetConnectionLost), далее мы удаляем объект CGrdDongle, в деструкторе вызывается ::GrdCloseHandle(m_hGrd), на ней происходит вылет. Последняя функция в стеке вызовов GrdUnInitializeNotificationAPI (кроме этого в стеке видно вызов GrdLogout, перед ней GrdUnInitializeNotificationAPI и после нее еще 3).<br />Библиотеки взяты из Guardant SDK 7 update 6.<br />Есть скриншот, но не удалось загрузить на форум.</p>]]></description>
			<author><![CDATA[null@example.com (ls)]]></author>
			<pubDate>Thu, 07 Nov 2019 07:59:29 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/4231/#p4231</guid>
		</item>
		<item>
			<title><![CDATA[Re: Падение программы на вызове GrdUnInitializeNotificationAPI]]></title>
			<link>https://forum.guardant.ru/post/4200/#p4200</link>
			<description><![CDATA[<p>Здравствуйте. Скачайте Guardant SDK 7 update 6. Соберетие ваше приложение, используя библиотеки и объектные файлы строго из SDK 7 up. 6. Проверьте работу приложения.</p>]]></description>
			<author><![CDATA[null@example.com (Тимофей Ершов)]]></author>
			<pubDate>Tue, 03 Sep 2019 09:48:22 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/4200/#p4200</guid>
		</item>
		<item>
			<title><![CDATA[Re: Падение программы на вызове GrdUnInitializeNotificationAPI]]></title>
			<link>https://forum.guardant.ru/post/4199/#p4199</link>
			<description><![CDATA[<p>Здравствуйте Тимофей у нас используется SDK версии 7. <br />Примеры я практически все пересмотрел, они достаточно однотипны, работа с ключем происходит в одной функции и программа завершается. <br />А вот примеров как работать с ключом циклично я не нашел. Циклично это значит что в основной программе есть функция которая периодически проверяет подключен ли ключ и если он подключен<br />производит какие либо манипуляции с ним. Вы можете уточнить во время вызова какой функции Guardant API, выполняется функция GrdUnInitializeNotificationAPI во внутреннем коде библиотеки? И почему после ее вызова может произойти падение с сигналом SIGSEGV?</p>]]></description>
			<author><![CDATA[null@example.com (Coxwain)]]></author>
			<pubDate>Tue, 03 Sep 2019 03:18:51 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/4199/#p4199</guid>
		</item>
		<item>
			<title><![CDATA[Re: Падение программы на вызове GrdUnInitializeNotificationAPI]]></title>
			<link>https://forum.guardant.ru/post/4198/#p4198</link>
			<description><![CDATA[<p>Здравствуйте. Уточните, какая версия SDK используется. В составе современного SDK присутствуют <a href="https://dev.guardant.ru/display/KB/0017">примеры</a> использования Guardant API. Ознакомьтесь с примером General Guardant API. Здесь вы найдете рекомендации по реализации процедуры поиска и проверке наличия ключа.</p>]]></description>
			<author><![CDATA[null@example.com (Тимофей Ершов)]]></author>
			<pubDate>Mon, 02 Sep 2019 12:04:43 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/4198/#p4198</guid>
		</item>
		<item>
			<title><![CDATA[Падение программы на вызове GrdUnInitializeNotificationAPI]]></title>
			<link>https://forum.guardant.ru/post/4197/#p4197</link>
			<description><![CDATA[<p>Здравствуйте! В нашем приложении используются ключи GuardantCodeTime. Примерная функция проверки лицензии выглядит следующим образом:</p><div class="codebox"><pre><code>HANDLE hHandle = INVALID_HANDLE_VALUE;

int CheckLicense()
{ 
    // Результат работы функции
    int res = -1;
    
    // Наличие ключа
    bool keyOk = false;

    // Проверка наличия ключа
    if(hHandle == INVALID_HANDLE_VALUE || GrdCheck(hHandle) != GrdE_OK)
    {
        // Поиск и подключение к ключу
        if((GrdStartup() == GrdE_OK) &amp;&amp;
           (GrdCreateHandle(hHandle) != INVALID_HANDLE_VALUE) &amp;&amp;
           (GrdSetAccessCodes(hHandle, ...) == GrdE_OK) &amp;&amp;
           (GrdFind(hHandle, ...) == GrdE_OK) &amp;&amp;
           (GrdSetWorkMode(hHandle, ...) == GrdE_OK) &amp;&amp;
           (GrdLogin(hHandle) == GrdE_OK))
        {
            keyOk = true;
        // Возникли ошибки при подключению к ключу
        } else {
            GrdCloseHandle(hHandle);
            hHandle = INVALID_HANDLE_VALUE;
            GrdCleanup();
        }
    } else {
        // Ключ присутствует и уже был проинициализирован
        keyOk = true;
    }
    
    if(keyOk)
    {
        // Вызов внутренних функций ключа для проверки лицензии
        res = GrdCodeRun(...) 
        ...
    }
    
    return res;
}</code></pre></div><p>Когда ключ подключен, функция проверки отрабатывает без ошибок, но когда ключа нет, то после 3-4 часов работы функции, возникает исключение SIGSEGV. Последняя успешно выполненная функция, которая отображается в отладчике - GrdUnInitializeNotificationAPI. Как я понимаю данная функция реализована в библиотеке GrdAPI. <br />&nbsp; &nbsp;При отсутствии ключа выполняется следующий набор функций GrdStartup, GrdCreateHandle, GrdSetAccessCodes и на функции GrdFind происходит ошибка, из-за которой происходит вызов функций GrdCloseHandle, GrdCleanup. Еще хотелось бы отметить, что при подключенном ключе функция проверки вызывается раз в несколько минут, а при отсутсвии раз в 5 секунд. В чем может быть проблема?</p>]]></description>
			<author><![CDATA[null@example.com (Coxwain)]]></author>
			<pubDate>Mon, 02 Sep 2019 11:00:59 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/4197/#p4197</guid>
		</item>
	</channel>
</rss>
