<?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=195907&amp;view=findpost&amp;p=1640364</guid>
        <pubDate>Thu, 19 Jul 2007 12:14:08 +0000</pubDate>
        <title>Сущность строк в Visual Basic</title>
        <link>https://forum.sources.ru/index.php?showtopic=195907&amp;view=findpost&amp;p=1640364</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>Разное (кодинг)</category>
      </item>
	
      </channel>
      </rss>
	