<?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=195820&amp;view=findpost&amp;p=1643735</guid>
        <pubDate>Mon, 23 Jul 2007 10:18:48 +0000</pubDate>
        <title>Сущность строк в Visual Basic</title>
        <link>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1643735</link>
        <description><![CDATA[HardRock: Копи-пастл <a class='tag-url' href='http://vbstreets.ru/VB/Articles/66364.aspx' target='_blank'>отсюда</a>? Или наоборот :)<br>
Впрочем неважно.]]></description>
        <author>HardRock</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1643448</guid>
        <pubDate>Mon, 23 Jul 2007 06:51:48 +0000</pubDate>
        <title>Сущность строк в Visual Basic</title>
        <link>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1643448</link>
        <description><![CDATA[Alary: Строки в VB6 http://silicontaiga.ru/home.asp?artId=5110]]></description>
        <author>Alary</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1640823</guid>
        <pubDate>Thu, 19 Jul 2007 21:10:14 +0000</pubDate>
        <title>Сущность строк в Visual Basic</title>
        <link>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1640823</link>
        <description><![CDATA[HardRock: Данный факт кстати и получен методом великой IDA и OllyDebugger.<br>
В последнее время очень увлёкся внутреннестями VB :)<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=195820&view=findpost&p=1640771'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>EvgenyR_(Djoser) &#064; <time class="tag-quote__quoted-time" datetime="2007-07-19T18:44:21+00:00">19.07.07, 18:44</time></span><div class='quote '> Если строки в VB изначально хранятся в Unicode формате, то не разумнее ли было бы использовать *W функции, опуская тем самым преобразование Unicode-&gt;ASCII (BSTR-&gt;ABSTR)? Поправьте меня если я что-то не так понял</div></div><br>
Поправлять нечего. Так и есть, перед каждым вызовом API, строка перегоняется из юникода.<br>
<br>
VB на самом деле криво работает с Unicode, хотя это является его родной кодировкой.<br>
Данным вопросом задавались <a class='tag-url' href='http://vbstreets.ru/VB/Articles/66364.aspx' target='_blank'>здесь</a> (читал по диагонали поэтому не могу сказать об информативности статьи)<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=195820&view=findpost&p=1640774'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ANDLL &#064; <time class="tag-quote__quoted-time" datetime="2007-07-19T18:51:20+00:00">19.07.07, 18:51</time></span><div class='quote '>Почему в картинке четыре нуля в конце?</div></div><br>
Да, скосячил, поправлю.<br>
На самом деле там должно быть 2 нулевых байта, если верить <a class='tag-url' href='http://msdn2.microsoft.com/en-us/library/ms221069.aspx' target='_blank'>этому</a>]]></description>
        <author>HardRock</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1640783</guid>
        <pubDate>Thu, 19 Jul 2007 19:34:30 +0000</pubDate>
        <title>Сущность строк в Visual Basic</title>
        <link>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1640783</link>
        <description><![CDATA[ANDLL: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=195820&view=findpost&p=1640779'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>EvgenyR_(Djoser) &#064; <time class="tag-quote__quoted-time" datetime="2007-07-19T19:07:27+00:00">19.07.07, 19:07</time></span><div class='quote '>Получить последний символ в названии задекларенной функции такая уж проблема для VB?</div></div>Буква в конце названия функции это не отражение в имени. Согласно соглашениям содержимое функции от имени не зависит. Исходя из этого дальше допрешь? <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-07-19T19:36:10+00:00">19.07.07, 19:36</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=195820&view=findpost&p=1640779'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>EvgenyR_(Djoser) &#064; <time class="tag-quote__quoted-time" datetime="2007-07-19T19:07:27+00:00">19.07.07, 19:07</time></span><div class='quote '>Этот вопрос к чему относится?</div></div>Не к чему, а к кому, к автору топика.]]></description>
        <author>ANDLL</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1640779</guid>
        <pubDate>Thu, 19 Jul 2007 19:07:27 +0000</pubDate>
        <title>Сущность строк в Visual Basic</title>
        <link>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1640779</link>
        <description><![CDATA[EvgenyR_(Djoser): <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=195820&view=findpost&p=1640774'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ANDLL &#064; <time class="tag-quote__quoted-time" datetime="2007-07-19T18:51:20+00:00">19.07.07, 18:51</time></span><div class='quote '>Почему в картинке четыре нуля в конце?</div></div><br>
Этот вопрос к чему относится?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=195820&view=findpost&p=1640774'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ANDLL &#064; <time class="tag-quote__quoted-time" datetime="2007-07-19T18:51:20+00:00">19.07.07, 18:51</time></span><div class='quote '>Как он должен угадывать где у тебя A-функция а где нет?</div></div><br>
Ну мы же прямо декларим:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=195820&view=findpost&p=1640771'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>EvgenyR_(Djoser) &#064; <time class="tag-quote__quoted-time" datetime="2007-07-19T18:44:21+00:00">19.07.07, 18:44</time></span><div class='quote '>Alias &quot;DrawTextW&quot;</div></div><br>
Получить последний символ в названии задекларенной функции такая уж проблема для VB?<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=195820&view=findpost&p=1640774'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ANDLL &#064; <time class="tag-quote__quoted-time" datetime="2007-07-19T18:51:20+00:00">19.07.07, 18:51</time></span><div class='quote '>A-функции от слова ANSI, это целый набор кодировок разработанный угадайте кем.</div></div><br>
American National Standard Institute :) <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-07-19T19:15:40+00:00">19.07.07, 19:15</time></span></span><br>
А вообще надо дизасмить и смотреть :whistle: завтра так и сделаю (наверно)]]></description>
        <author>EvgenyR_(Djoser)</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1640774</guid>
        <pubDate>Thu, 19 Jul 2007 18:51:20 +0000</pubDate>
        <title>Сущность строк в Visual Basic</title>
        <link>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1640774</link>
        <description><![CDATA[ANDLL: Во первых термины<br>
ASCII это кодировка. A-функции от слова ANSI, это целый набор кодировок разработанный угадайте кем.<br>
Unicode это не кодировка. В MSDN везде пишут unicode, но вообще полезно знать что в понятие Unicode входит дофига кодировок, а windows nt использует в себе конкретно UTF-16<br>
Далее. Большинство(если не все) W-функций не работают в windows 98 без одного патча. Если бы VB считал что функция ожидает двухбайтовые симолы, то программ написанные на нем оказались бы весьма непотребными в течении долгого времени.<br>
Почему в картинке четыре нуля в конце?<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=195820&view=findpost&p=1640771'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>EvgenyR_(Djoser) &#064; <time class="tag-quote__quoted-time" datetime="2007-07-19T18:44:21+00:00">19.07.07, 18:44</time></span><div class='quote '>Я вижу пока только одно объяснение: VB преобразует BSTR в ABSTR независимо от вызываемой функции</div></div>Ага. Как он должен угадывать где у тебя A-функция а где нет?]]></description>
        <author>ANDLL</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1640771</guid>
        <pubDate>Thu, 19 Jul 2007 18:44:21 +0000</pubDate>
        <title>Сущность строк в Visual Basic</title>
        <link>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1640771</link>
        <description><![CDATA[EvgenyR_(Djoser): тривиальный тест:<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">Option Explicit</div><div class="code_line">Private Declare Function GetTickCount&amp; Lib &quot;kernel32&quot; ()</div><div class="code_line">Const DC_ACTIVE = &amp;H1</div><div class="code_line">Const DC_NOTACTIVE = &amp;H2</div><div class="code_line">Const DC_ICON = &amp;H4</div><div class="code_line">Const DC_TEXT = &amp;H8</div><div class="code_line">Const BDR_SUNKENOUTER = &amp;H2</div><div class="code_line">Const BDR_RAISEDINNER = &amp;H4</div><div class="code_line">Const EDGE_ETCHED = (BDR_SUNKENOUTER Or BDR_RAISEDINNER)</div><div class="code_line">Const BF_BOTTOM = &amp;H8</div><div class="code_line">Const BF_LEFT = &amp;H1</div><div class="code_line">Const BF_RIGHT = &amp;H4</div><div class="code_line">Const BF_TOP = &amp;H2</div><div class="code_line">Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM)</div><div class="code_line">Const DFC_BUTTON = 4</div><div class="code_line">Const DFC_POPUPMENU = 5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;Only Win98/2000 !!</div><div class="code_line">Const DFCS_BUTTON3STATE = &amp;H10</div><div class="code_line">Const DT_CENTER = &amp;H1</div><div class="code_line">Const DC_GRADIENT = &amp;H20 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;Only Win98/2000 !!</div><div class="code_line">Private Type RECT</div><div class="code_line">&nbsp;&nbsp; &nbsp;Left As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;Top As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;Right As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;Bottom As Long</div><div class="code_line">End Type</div><div class="code_line">Private Declare Function DrawCaption Lib &quot;user32&quot; (ByVal hWnd As Long, ByVal hdc As Long, pcRect As RECT, ByVal un As Long) As Long</div><div class="code_line">Private Declare Function DrawEdge Lib &quot;user32&quot; (ByVal hdc As Long, qrc As RECT, ByVal edge As Long, ByVal grfFlags As Long) As Long</div><div class="code_line">Private Declare Function DrawFocusRect Lib &quot;user32&quot; (ByVal hdc As Long, lpRect As RECT) As Long</div><div class="code_line">Private Declare Function DrawFrameControl Lib &quot;user32&quot; (ByVal hdc As Long, lpRect As RECT, ByVal un1 As Long, ByVal un2 As Long) As Long</div><div class="code_line">Private Declare Function DrawText Lib &quot;user32&quot; Alias &quot;DrawTextA&quot; (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long</div><div class="code_line">Private Declare Function DrawText2 Lib &quot;user32&quot; Alias &quot;DrawTextW&quot; (ByVal hdc As Long, ByRef lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long</div><div class="code_line">Private Declare Function SetRect Lib &quot;user32&quot; (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long</div><div class="code_line">Private Declare Function OffsetRect Lib &quot;user32&quot; (lpRect As RECT, ByVal x As Long, ByVal y As Long) As Long</div><div class="code_line">Dim ret As Long, i As Long</div><div class="code_line">&nbsp;</div><div class="code_line">Private Sub Command1_Click()</div><div class="code_line">&nbsp;Dim R As RECT</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;Clear the form</div><div class="code_line">&nbsp;&nbsp; &nbsp;Me.Cls</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;API uses pixels</div><div class="code_line">&nbsp;&nbsp; &nbsp;Me.ScaleMode = vbPixels</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;Set the rectangle&#39;s values</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetRect R, 0, 0, Me.ScaleWidth, 20</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;Draw a caption on the form</div><div class="code_line">&nbsp;&nbsp; &nbsp;ret&amp; = GetTickCount&amp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;For i = 1 To 100000</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;DrawText Me.hdc, &quot;Hello World !&quot;, Len(&quot;Hello World !&quot;), R, DT_CENTER</div><div class="code_line">&nbsp;&nbsp; &nbsp;Next i</div><div class="code_line">&nbsp;&nbsp; &nbsp;ret&amp; = GetTickCount&amp; - ret&amp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;MsgBox Str$(ret)</div><div class="code_line">End Sub</div><div class="code_line">&nbsp;</div><div class="code_line">Private Sub Command2_Click()</div><div class="code_line">Dim R As RECT</div><div class="code_line">Dim strTemp As String</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;Clear the form</div><div class="code_line">&nbsp;&nbsp; &nbsp;Me.Cls</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;API uses pixels</div><div class="code_line">&nbsp;&nbsp; &nbsp;Me.ScaleMode = vbPixels</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;Set the rectangle&#39;s values</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetRect R, 0, 0, Me.ScaleWidth, 20</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;Draw a caption on the form</div><div class="code_line">&nbsp;&nbsp; &nbsp;strTemp = &quot;Hello World !&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ret&amp; = GetTickCount&amp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;For i = 1 To 100000</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;DrawText2 Me.hdc, strTemp, Len(strTemp), R, DT_CENTER</div><div class="code_line">&nbsp;&nbsp; &nbsp;Next i</div><div class="code_line">&nbsp;&nbsp; &nbsp;ret&amp; = GetTickCount&amp; - ret&amp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;MsgBox Str$(ret)</div><div class="code_line">End Sub</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Выдает результаты 790 / 1200 не в пользу *W функции&#33; Для меня это пока удивительно... К тому же выводимая абракадабра *W-функцией говорит о том, что либо VB преобразует BSTR в ABSTR независимо от вызываемой функции, либо строка уже ABSTR... Чудно однако, поясните, плиз, кто в этом разбирается, сложившуюся ситуацию, что *A-функция работает быстрее *W-функции.<br>
(Я вижу пока только одно объяснение: VB преобразует BSTR в ABSTR независимо от вызываемой функции)]]></description>
        <author>EvgenyR_(Djoser)</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1640663</guid>
        <pubDate>Thu, 19 Jul 2007 15:42:58 +0000</pubDate>
        <title>Сущность строк в Visual Basic</title>
        <link>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1640663</link>
        <description><![CDATA[EvgenyR_(Djoser): <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Итак, первый тип, BSTR(именно он использовуется в переменных типа String в VB6) - строка из unicode-символов, которая кончается двухбайтовым терминатором и перед которой стоит ее длина. Ввиду того, что сама строка содержит свою длину она может содержать произвольные символы.<br>
Во второй тип, ABSTR, VB преобразует строки перед тем как передать их в API-функции. Этот тип отличается от BSTR тем, что содержит однобайтовые символы, вместо двухбайтовых.</div></div><br>
<br>
Тогда вопрос: почему по умолчанию (тоесть в АПИ-вьювере) используются только *А функции (то есть принимающие строки в кодировке ASCII)? Если строки в VB изначально хранятся в Unicode формате, то не разумнее ли было бы использовать *W функции, опуская тем самым преобразование Unicode-&gt;ASCII (BSTR-&gt;ABSTR)? Поправьте меня если я что-то не так понял]]></description>
        <author>EvgenyR_(Djoser)</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1639686</guid>
        <pubDate>Wed, 18 Jul 2007 20:30:35 +0000</pubDate>
        <title>Сущность строк в Visual Basic</title>
        <link>https://forum.sources.ru/index.php?showtopic=195820&amp;view=findpost&amp;p=1639686</link>
        <description><![CDATA[HardRock: Всем привет.<br>
<br>
Хочу разъяснить что такое строка в Visual Basic и как она работает.<br>
<br>
Как извесно, строки в VB хранятся в виде BSTR (о том что это, подробно написал ANDLL <a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=166377' target='_blank'>здесь</a>)<br>
Формат весьма универсальный.<br>
<br>
Однако это не единственная фишка VB в строках.<br>
Если быть внимательным, то можно заметить, что для получения адресов переменных используется функция VarPtr, но только не для строковых. Для них испольуется StrPtr.<br>
Возникает 2 резонных вопроса: почему отдельная функция? и почему StrPtr и VarPtr возвращают разные знания?<br>
<br>
Всё дело в том, что строка в VB это всего-лишь 4 байта, являющиеся указателем на BSTR строку, причём не на её начало, а на данные (тоесть начало BSTR строки + 4 байта)&#33; <br>
Вот так всё просто и универсально.<br>
<br>
Функция VarPtr возвращает адрес ячейки памяти, где лежит адрес BSTR строки + 4, а функция StrPtr возвращает число из этой ячейки.<br>
Да и функции StrPtr физически не существует :)<br>
<br>
На рисунке сделал визуализацияю для упрощения понимания :)<br>
<br>
Кстати появляется возможность быстрого &quot;копирования&quot; строки или создания строк, данные в которых будут общими.]]></description>
        <author>HardRock</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	