<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1594609</guid>
        <pubDate>Fri, 08 Jun 2007 08:09:34 +0000</pubDate>
        <title>Передача данных через модем (TAPI)</title>
        <link>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1594609</link>
        <description><![CDATA[Felan: Суть то понятно. Я другое че-то никак не осмыслю. Связь то не рвется. А прием не заканчивается. Т.е. удаленный модем отправил данные, а они не все пришли... потерялись где-то по дороге или из-за ошибок или ище почему-то... Как это определить? Если сам модем это определяет, то что именно он говорит в таких случаях?<br>Я что-то смотрел в МСДН, но не понял, как это должно обрабатываться...<br>Если не трудно по подробнее объясни?]]></description>
        <author>Felan</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1594266</guid>
        <pubDate>Fri, 08 Jun 2007 05:45:02 +0000</pubDate>
        <title>Передача данных через модем (TAPI)</title>
        <link>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1594266</link>
        <description><![CDATA[medved_68: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=184149&view=findpost&p=1594224'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Felan &#064; <time class="tag-quote__quoted-time" datetime="2007-06-08T05:15:50+00:00">08.06.07, 05:15</time></span><div class='quote '>1 При работе через модем нет никакого подтверждения доставки как в сокетах? Т.е. получается, что то что мне послали, впринципе может и не прийти, даже если соединение модемы не разорвали и надо еще раз повторить запрос?</div></div><br>
<strong class='tag-b'>Felan</strong> зачем ты заморачиваешься такой проблемой??? Ты отправил запрос и будь уверен, если канал связи налажен - то твой запрос дойдет. Как - это проблема модема. Если не получается отправить (рухнул канал) модем вернет ошибку связи, которую ты должен словить и обработать.<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=184149&view=findpost&p=1594224'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Felan &#064; <time class="tag-quote__quoted-time" datetime="2007-06-08T05:15:50+00:00">08.06.07, 05:15</time></span><div class='quote '>2 Почему все время readFile попадает на ERROR_IO_PENDING?</div></div><br>
Ну вообще то сей флаг указывает что процедура Overlapped нормально стартовала и не закончена, т.е. число переданных/принятых байт не равно числу запрашиваемых тобой при вызове функции Read/Write. Определять, что процедура Overlapped завершена (считано/записано нужное тебе количество байт) необходимо по установке евента, дескриптор которого ты передаешь в данную процедуру. И про GetOverlappedResult не забывать, она позволяет контролировать ход отправки получения. Если, например, в течении определенного времени число принятых байт остается равным, то проверяй состояние модема (статус) - может он уже орет тебе об ошибке канала и необходимо повторить либо установку связи, либо повторно отправить запрос на прием и т.д.]]></description>
        <author>medved_68</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1594224</guid>
        <pubDate>Fri, 08 Jun 2007 05:15:50 +0000</pubDate>
        <title>Передача данных через модем (TAPI)</title>
        <link>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1594224</link>
        <description><![CDATA[Felan: Следующая проблема.<br>
На данном этапе все работает соединяется и передается. Но, когда циклически происходит опрос, и когда много раз... В моем случае это чтение записей архива устройства чтение очень часто зависает. Т.е. read попадает на (ERROR_IO_PENDING, она кстати всегда на нее попадает, но это вроде как нормально обрабатывается...) и этот пендинг никогда не заканчивается.<br>
<br>
Чтение сделал так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure TiaFlowmeterModemTAPIProvider.Receive(var aData: TiaBuf;</div><div class="code_line">&nbsp;&nbsp;aCount: Cardinal; var aReadedCount: Cardinal; const aDoSuccessEvent,</div><div class="code_line">&nbsp;&nbsp;aManageErrorEvent, aDoErrorEvent: Boolean);</div><div class="code_line">Var</div><div class="code_line">&nbsp;&nbsp;vOvr: TOverlapped;</div><div class="code_line">&nbsp;&nbsp;vError: Cardinal;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;If Not GetActive then</div><div class="code_line">&nbsp;&nbsp; &nbsp;raise EiaModemTAPIProviderError.Create(ERR_TP_PROVIDERINACTIVE, ERR_TP_PROVIDERINACTIVE_UIN, ERR_TP_PROVIDERINACTIVE_UIN);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;SetLength(aData, aCount);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;SetLastError(0);</div><div class="code_line">&nbsp;&nbsp;vOvr.hEvent := CreateEvent(nil, false, false, nil);</div><div class="code_line">&nbsp;&nbsp;//Читаем</div><div class="code_line">&nbsp;&nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp;{$WARNINGS OFF}</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ReadFile(fCommHandle, aData[0], aCount, aReadedCount, @vOvr) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;//Проверка на правильность отправки</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if not GetOverlappedResult(fCommHandle, vOvr, aReadedCount, true) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;showErrorMessage(GetLastError);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;vError := GetLastError;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (vError &#60;&#62; ERROR_IO_PENDING) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;showErrorMessage(vError)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if WaitForSingleObject(vOvr.hEvent, INFINITE) = WAIT_OBJECT_0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Проверка на правильность отправки</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if not GetOverlappedResult(fCommHandle, vOvr, aReadedCount, true) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;vError := GetLastError;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (vError &#60;&#62; ERROR_IO_PENDING) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;showErrorMessage(vError);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (vError &#60;&#62; ERROR_IO_PENDING) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;showErrorMessage(vError)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;{$WARNINGS ON}</div><div class="code_line">&nbsp;&nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp;CloseHandle(vOvr.hEvent);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;//Проверка на правильность принятия</div><div class="code_line">&nbsp;&nbsp;If aCount &#60;&#62; aReadedCount then</div><div class="code_line">&nbsp;&nbsp; &nbsp;raise EiaModemTAPIProviderError.Create(ERR_TP_READANSWERERROR, ERR_TP_READANSWERERROR_UIN, ERR_TP_READANSWERERROR_UIN);</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Так вот совершенно в случайном месте ожидание WaitForSingleObject(vOvr.hEvent, INFINITE) зависает до бесконечности...<br>
Если вместо INFINITE поставить таймаут, то ессно по его истечению программа продолжает работать, и ессно получаем ошибку, т.к. не все байты приняты.<br>
<br>
Так вот вопросы следующие:<br>
1 При работе через модем нет никакого подтверждения доставки как в сокетах? Т.е. получается, что то что мне послали, впринципе может и не прийти, даже если соединение модемы не разорвали и надо еще раз повторить запрос?<br>
<br>
2 Почему все время readFile попадает на ERROR_IO_PENDING? Даже в том случае, если чтение происходит первый раз, т.е. я псылаю первую команду, и пытаюсь читать ответ? Понятно, что при посылке я жду не опустожения буфера передачи, а момента, когда в этот буфер будет записано все, что я хочу передать, но ведь вроде полный дуплекс? Получается, что сначала надо дождаться, что бы передалось, а потом уже принимать?<br>
<br>
3 Как вообще правильно поступать при приеме данных с модема? Как определить, что это какой-то случайная ошибка, что бы потом перезапросить данные?]]></description>
        <author>Felan</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1586544</guid>
        <pubDate>Fri, 01 Jun 2007 08:10:28 +0000</pubDate>
        <title>Передача данных через модем (TAPI)</title>
        <link>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1586544</link>
        <description><![CDATA[Felan: Блин... :) Где же я это пропустил-то... :)<br>Аж интересно прям теперь самому прочитать... Счас посмотрел по быстрому, опять не нашел.. :(]]></description>
        <author>Felan</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1586462</guid>
        <pubDate>Fri, 01 Jun 2007 07:13:22 +0000</pubDate>
        <title>Передача данных через модем (TAPI)</title>
        <link>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1586462</link>
        <description><![CDATA[jack128: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=184149&view=findpost&p=1586331'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Felan &#064; <time class="tag-quote__quoted-time" datetime="2007-06-01T05:03:45+00:00">01.06.07, 05:03</time></span><div class='quote '> почему его надо закрывать самому?</div></div><br>
потому что так написано в sdk ;-)]]></description>
        <author>jack128</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1586331</guid>
        <pubDate>Fri, 01 Jun 2007 05:03:45 +0000</pubDate>
        <title>Передача данных через модем (TAPI)</title>
        <link>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1586331</link>
        <description><![CDATA[Felan: Вроде разобрался с этим всем. Все работает и передается.<br>Есть еще такой вопрос. Когда делаем дисконнект почему не закрывается хэндл ком-порта(хэндл через который идет передача fCommHandle из поста #1)? Если он открывается неявно, то почему его надо закрывать самому?<br><br>Получается, что  если при дисконнекте(закрытии) соединения не сделать ему closehandle то в следующий раз соединение не устанавливаетя по &quot;неизвестной причине&quot;, код тапи ...000048.<br>Если же его закрыть, то вроде все работает...]]></description>
        <author>Felan</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1557505</guid>
        <pubDate>Tue, 08 May 2007 16:43:11 +0000</pubDate>
        <title>Передача данных через модем (TAPI)</title>
        <link>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1557505</link>
        <description><![CDATA[Felan: Так... Попробовал я посмотреть, что возвращается...<br>
Делал так:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure TiaFlowmeterModemTAPIProvider.Send(aData: TiaBuf;</div><div class="code_line">&nbsp;&nbsp;const aDoSuccessEvent, aManageErrorEvent, aDoErrorEvent: Boolean);</div><div class="code_line">Var</div><div class="code_line">&nbsp;&nbsp;vOutBufLen: Cardinal;</div><div class="code_line">&nbsp;&nbsp;vWritedCount: Cardinal;</div><div class="code_line">&nbsp;&nbsp;vWFResult: Boolean;</div><div class="code_line">&nbsp;&nbsp;vError: Cardinal;</div><div class="code_line">&nbsp;&nbsp;vOvr: TOverlapped;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;vS: String;</div><div class="code_line">&nbsp;&nbsp;Len: Integer;</div><div class="code_line">&nbsp;&nbsp;Buffer: array[0..255] of Char;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;If Not GetActive then</div><div class="code_line">&nbsp;&nbsp; &nbsp;raise EiaModemTAPIProviderError.Create(ERR_TP_PROVIDERINACTIVE, ERR_TP_PROVIDERINACTIVE_UIN, ERR_TP_PROVIDERINACTIVE_UIN);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;vOutBufLen := Length(aData);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;SetLastError(0);</div><div class="code_line">&nbsp;&nbsp;vWFResult := false;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;vWFResult := WriteFile(fCommHandle, aData[0], vOutBufLen, vWritedCount, {@vOvr} nil);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;vError := GetLastError;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Len := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or</div><div class="code_line">&nbsp;&nbsp; &nbsp;FORMAT_MESSAGE_ARGUMENT_ARRAY, nil, vError, 0, Buffer,</div><div class="code_line">&nbsp;&nbsp; &nbsp;SizeOf(Buffer), nil);</div><div class="code_line">&nbsp;&nbsp;while (Len &#62; 0) and (Buffer[Len - 1] in [#0..#32, &#39;.&#39;]) do</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dec(Len);</div><div class="code_line">&nbsp;&nbsp;SetString(vS, Buffer, Len);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;vS := IntToStr(vError) + &#39;: &#39; + vS;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if not vWFResult then</div><div class="code_line">&nbsp;&nbsp; &nbsp;showmessage(vS);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;If vOutBufLen &#60;&#62; vWritedCount then</div><div class="code_line">&nbsp;&nbsp; &nbsp;raise EiaModemTAPIProviderError.Create(ERR_TP_WRITEDATAERROR, ERR_TP_WRITEDATAERROR_UIN, ERR_TP_WRITEDATAERROR_UIN);</div><div class="code_line">end;</div></ol></div></div></div></div><br>
<br>
WriteFile возвращает всевремя false.<br>
Если в ней вместо vOvr, стоит nil то возвращается 87. Судя по MSDN это ERROR_INVALID_PARAMETER.<br>
Исли указать оверлаппед структуру, то возвращается 6 - ERROR_INVALID_HANDLE.<br>
<br>
1. Если я правильно понял, то писать данные синхронно нелзя совсем? :(<br>
2. Как тогда правильно получить хэндл, в который писать данные?]]></description>
        <author>Felan</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1555904</guid>
        <pubDate>Mon, 07 May 2007 15:14:16 +0000</pubDate>
        <title>Передача данных через модем (TAPI)</title>
        <link>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1555904</link>
        <description><![CDATA[medved_68: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=184149&view=findpost&p=1555219'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Felan &#064; <time class="tag-quote__quoted-time" datetime="2007-05-07T05:29:44+00:00">07.05.07, 05:29</time></span><div class='quote '>А пока, мне пришла в голову одна мысль... Вроде как этот хэндл должен быть открыть асинхронно... </div></div><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=184149&view=findpost&p=1555352'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>jack128 &#064; <time class="tag-quote__quoted-time" datetime="2007-05-07T07:29:34+00:00">07.05.07, 07:29</time></span><div class='quote '>никак. TAPI сама открывает порт, ты на это никак повлиять не можешь.. </div></div><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=184149&view=findpost&p=1555219'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Felan &#064; <time class="tag-quote__quoted-time" datetime="2007-05-07T05:29:44+00:00">07.05.07, 05:29</time></span><div class='quote '>А в асинхронном режиме, вроде как этот счетчик и должне равняться нулю...</div></div><br>
GetOverlappedResult ??????]]></description>
        <author>medved_68</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1555352</guid>
        <pubDate>Mon, 07 May 2007 07:29:34 +0000</pubDate>
        <title>Передача данных через модем (TAPI)</title>
        <link>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1555352</link>
        <description><![CDATA[jack128: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=184149&view=findpost&p=1555219'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Felan &#064; <time class="tag-quote__quoted-time" datetime="2007-05-07T05:29:44+00:00">07.05.07, 05:29</time></span><div class='quote '>Хм... не знаю. Не подумал об этом.</div></div><br>
Знаешь, а тут думать не надо.  Есть четкое правило - ВСЕГДА проверять коды возврата. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2007-05-07T07:30:52+00:00">07.05.07, 07:30</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=184149&view=findpost&p=1555219'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Felan &#064; <time class="tag-quote__quoted-time" datetime="2007-05-07T05:29:44+00:00">07.05.07, 05:29</time></span><div class='quote '>Как можно открыть этот хендл в синхронном режиме? Т.к. асинхронный режим мне вообще не нужен&#33; Только лишнее усложнение </div></div><br>
никак.  TAPI сама открывает порт, ты на это никак повлиять не можешь..]]></description>
        <author>jack128</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1555219</guid>
        <pubDate>Mon, 07 May 2007 05:29:44 +0000</pubDate>
        <title>Передача данных через модем (TAPI)</title>
        <link>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1555219</link>
        <description><![CDATA[Felan: Хм... не знаю. Не подумал об этом. Взял кусок из старого проекта где с ком-портом прога работала...<br>Посмотрю в ближайшее время, как получится с напарником состыковаться для дозвона, что она там возвращает...<br>А пока, мне пришла в голову одна мысль... Вроде как этот хэндл должен быть открыть асинхронно... А в асинхронном режиме, вроде как этот счетчик и должне равняться нулю...<br><br>Как можно открыть этот хендл в синхронном режиме? Т.к. асинхронный режим мне вообще не нужен&#33; Только лишнее усложнение :(<br><br>ЗЫЖ Почему в сетевое то? Уж тогда в работу с железом или АПИ :)]]></description>
        <author>Felan</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1554689</guid>
        <pubDate>Sun, 06 May 2007 09:41:22 +0000</pubDate>
        <title>Передача данных через модем (TAPI)</title>
        <link>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1554689</link>
        <description><![CDATA[jack128: почяему не проверяешь, что возвращает WriteFile?]]></description>
        <author>jack128</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1554326</guid>
        <pubDate>Sat, 05 May 2007 17:51:01 +0000</pubDate>
        <title>Передача данных через модем (TAPI)</title>
        <link>https://forum.sources.ru/index.php?showtopic=184149&amp;view=findpost&amp;p=1554326</link>
        <description><![CDATA[Felan: Пытаюсь работать с модемом через TAPI.<br>
Все более или менее работает. Номер набирается, соединение устанавливается...<br>
Хэндл, для передачи данных получается. Покрайней мере ошибок не возникает. Хэндл получаю так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure TiaFlowmeterModemTAPIProvider.afterConnected;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;vVarString: LPVARSTRING;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;vVarString := AllocMem(1024);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;vVarString.dwTotalSize := 1024;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{$WARNINGS OFF}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;TapiCheck(LineGetID(0, 0, fCall, LINECALLSELECT_CALL, vVarString, &#39;comm/datamodem&#39;));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;fCommHandle := PInteger(PChar(vVarString) + vVarString.dwStringOffset)^;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{$WARNINGS ON}</div><div class="code_line">&nbsp;&nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FreeMem(vVarString);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;except</div><div class="code_line">&nbsp;&nbsp; &nbsp;self.Close();</div><div class="code_line">&nbsp;&nbsp; &nbsp;raise;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div></ol></div></div></div></div><br>
Здесь в fCommHandle выставляется некий хэндл, через который я потом пытаюсь писать данные вот так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Var</div><div class="code_line">&nbsp;&nbsp;vOutBufLen: Cardinal;</div><div class="code_line">&nbsp;&nbsp;vWritedCount: Cardinal;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;If Not GetActive then</div><div class="code_line">&nbsp;&nbsp; &nbsp;raise EiaModemTAPIProviderError.Create(ERR_TP_PROVIDERINACTIVE, ERR_TP_PROVIDERINACTIVE_UIN, ERR_TP_PROVIDERINACTIVE_UIN);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;vOutBufLen := Length(aData);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;WriteFile(fCommHandle, aData[0], vOutBufLen, vWritedCount, nil);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;If vOutBufLen &#60;&#62; vWritedCount then</div><div class="code_line">&nbsp;&nbsp; &nbsp;raise EiaModemTAPIProviderError.Create(ERR_TP_WRITEDATAERROR, ERR_TP_WRITEDATAERROR_UIN, ERR_TP_WRITEDATAERROR_UIN);</div></ol></div></div></div></div><br>
<br>
vOutBufLen всегда не равна vWritedBufLen, которая всегда равна 0.<br>
На той стороне тоже ничего не приходит&#33; Пробовал посылать просто текстовую строку... <br>
<br>
Как правильно сделать???]]></description>
        <author>Felan</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	