<?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=241951&amp;view=findpost&amp;p=2003791</guid>
        <pubDate>Thu, 03 Jul 2008 11:55:15 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2003791</link>
        <description><![CDATA[Артур: Я так полагаю, что теперь-то точно - вопрос решён? Жму кнопку :) <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="2008-07-03T16:10:59+04:00">03.07.08, 12:10</time></span></span><br>
Кстати, в комментариях к статье предложен как раз подход без функций SafeArrayЛяляля - там предлагается рядом с объявлением массива объявлять и его  SAFEARRAY, а размерности (которые могут быть разными) как-то хитро хранить в строках (я недопонял).<br>
<br>
Так мой способ с сохранением адреса старых данных, мне кажется, тоже не так уж и плох. Тем более, что заморачиваться по поводу полей стуктуры вообще не пришлось бы, а один лонг, лежащий рядом с массивом - это даже меньше, чем одна SAFEARRAY, лежащая там же.]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2003729</guid>
        <pubDate>Thu, 03 Jul 2008 11:20:08 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2003729</link>
        <description><![CDATA[B.V.: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2003671'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-03T10:41:17+00:00">03.07.08, 10:41</time></span><div class='quote '>какой смысл инициировать?</div></div><br>
<br>
Что бы было совсем красиво. Это не обязательно.]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2003671</guid>
        <pubDate>Thu, 03 Jul 2008 10:41:17 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2003671</link>
        <description><![CDATA[Артур: <strong class='tag-b'>B.V.</strong><br>
Ну так  lLbound ведь ноль - какой смысл инициировать?<br>
<br>
А cDims, вроде бы, заполняется самой SafeArrayAllocDescriptor - у меня размерность одна, так что я сразу 1 и записал]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2003586</guid>
        <pubDate>Thu, 03 Jul 2008 09:28:23 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2003586</link>
        <description><![CDATA[B.V.: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2003362'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-03T07:10:06+00:00">03.07.08, 07:10</time></span><div class='quote '>А то, как я переписал - правильно?</div></div><br>
<br>
Вроде как да. Только ты оставил непроинициализированными cDims и lLbound.]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2003362</guid>
        <pubDate>Thu, 03 Jul 2008 07:10:06 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2003362</link>
        <description><![CDATA[Артур: В смысле SafeArrayAllocDescriptor это и объявление структцры и выделение памяти? Ну да, я уже догадался :)<br><br>А то, как я переписал - правильно? Вроде, работает.]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2003282</guid>
        <pubDate>Thu, 03 Jul 2008 06:09:59 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2003282</link>
        <description><![CDATA[B.V.: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2003234'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-03T04:41:26+00:00">03.07.08, 04:41</time></span><div class='quote '>В таком случае, к чему был этот совет?</div></div><br>
<br>
Ой, сам не знаю :) В общем, первые два пункта -- SafeArrayAllocDescriptor.]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2003234</guid>
        <pubDate>Thu, 03 Jul 2008 04:41:26 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2003234</link>
        <description><![CDATA[Артур: <strong class='tag-b'>B.V.</strong><br>
Ты переоцениваешь мою способность понимать такие статьи. Читал, и уже не один раз (и даже, наверное, не десять). И с каждым разом всё больше понятно... Сейчас уже понимаю процентов 5.<br>
<br>
В основном, понятным становится то, что получается использовать. Как использовать CreateSAFEARRAY, мне не понятно. Ну тупой я. Кстати, массив всё рано нужно будет уничтожать самому - ну и какая тогда разница: так создавать и уничтожать или как у меня? Только в том, что с каждой строкой я храню один лонг? Ну ещё в том, что мой вариант не так изящен. Зато я сам до него додумался.<br>
<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Надо объявить структуру SAFEARRAY</div></div>В таком случае, к чему был этот совет? у Сергея структура не объявлена (просто описана), а заполняет он её теми же гетмем и путмем. Да ещё наводящим на меня ужас SafeArrayAllocDescriptor<br>
<br>
Кстати, сейчас ещё раз перечитал эту CreateSAFEARRAY - она, оказывается, уже почти понятна :) Через годик уже смогу использовать. <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="2008-07-03T05:10:37+00:00">03.07.08, 05:10</time></span></span><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">Option Explicit</div><div class="code_line">&nbsp;</div><div class="code_line">Private Declare Function ArrPtr Lib &quot;msvbvm60&quot; Alias &quot;VarPtr&quot; (ByRef pArr() As Any) As Long</div><div class="code_line">Private Declare Sub GetMem4 Lib &quot;msvbvm60&quot; (ByVal pSrc As Long, ByVal pDst As Long)</div><div class="code_line">Public Declare Function PutMem4 Lib &quot;msvbvm60&quot; (ByVal pDst As Long, ByVal NewValue As Long) As Long</div><div class="code_line">Private Declare Sub SafeArrayAllocDescriptor Lib &quot;oleaut32.dll&quot; (ByVal cDims As Long, ppsaOut As Any)</div><div class="code_line">Private Declare Sub SafeArrayDestroyDescriptor Lib &quot;oleaut32.dll&quot; (psa As Any)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">Public Function stringIsBytes(s As String, b() As Byte) As Long </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim psa As Long, pAr As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;pAr = ArrPtr(b)&#39;адрес массива</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 pAr, VarPtr(psa) &#39;в pSa получить адрес на SAFEARRAY массива</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;If psa = 0 Then &#39;массив ещё не проредимлен</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; SafeArrayAllocDescriptor 1, ByVal pAr &#39;выделяем новый дескриптор массива и память под него</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; GetMem4 pAr, VarPtr(psa) &#39;получаем дескриптор SAFEARRAY</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; PutMem4 psa + 4, 1 &#39;записываем размер элемента массива (массив байтовый, так что 1)</div><div class="code_line">&nbsp;&nbsp; &nbsp;End If</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim pStr As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;pStr = StrPtr(s) &#39; адрес данных строки</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 VarPtr(pStr), (psa + 12) &#39;подмена данных массива данными строки</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;PutMem4 psa + 16, LenB(s) &#39;записать длинну массива в SAFEARRAY.rgsabound.cElements</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">End Function</div><div class="code_line">&nbsp;</div><div class="code_line">Public Sub DestroySAFEARRAY(b() As Byte)</div><div class="code_line">&nbsp;&nbsp;Dim psa As Long, pAr As Long</div><div class="code_line">&nbsp;&nbsp;pAr = ArrPtr(b)</div><div class="code_line">&nbsp;&nbsp;GetMem4 pAr, VarPtr(psa)</div><div class="code_line">&nbsp;&nbsp;If psa Then</div><div class="code_line">&nbsp;&nbsp; &nbsp;SafeArrayDestroyDescriptor ByVal psa</div><div class="code_line">&nbsp;&nbsp; &nbsp;PutMem4 pAr, 0</div><div class="code_line">&nbsp;&nbsp;End If</div><div class="code_line">End Sub</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002973</guid>
        <pubDate>Wed, 02 Jul 2008 18:59:06 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002973</link>
        <description><![CDATA[B.V.: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2002889'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T17:38:34+00:00">02.07.08, 17:38</time></span><div class='quote '>допустим, я в функции объявляю sf as SAFEARRAY, заполняю поля и пристёгиваю её к массиву</div></div><br>
<br>
Эм. А ты правда читал те статьи, ну к которым тебя направили и с которых у тебя мысль появилась? Или ты дальше заголовка их не читал?<br>
http://www.vbstreets.ru/VB/Articles/65977.aspx, обрати внимание на функцию CreateSAFEARRAY.]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002889</guid>
        <pubDate>Wed, 02 Jul 2008 17:38:34 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002889</link>
        <description><![CDATA[Артур: Тогда по поводу чего было <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Ну разумеется.</div></div><br>
<br>
Мой вариант может и корявый, но мне понятный. А вариант с объявлением SAFEARRAY я представляю довольно смутно, и он мне не то чтобы сильно понятен. Если разберусь, то сделаю... но пока не разобрался. <br>
<br>
допустим, я в функции объявляю sf as SAFEARRAY, заполняю поля и пристёгиваю её к массиву. Но после выхода из функции sf ведь умрёт и память, выделенная под неё, освободится?]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002796</guid>
        <pubDate>Wed, 02 Jul 2008 16:39:48 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002796</link>
        <description><![CDATA[B.V.: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2002350'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>B.V. &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T11:17:33+00:00">02.07.08, 11:17</time></span><div class='quote '>Надо объявить структуру SAFEARRAY, выделить под неё память, присвоить указатель, ручками проинициализировать</div></div><br>
И ничего не придётся запоминать, возвращать...]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002773</guid>
        <pubDate>Wed, 02 Jul 2008 16:25:29 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002773</link>
        <description><![CDATA[Артур: <strong class='tag-b'>B.V.</strong><br>
А по какому поводу сарказм? как было бы лучше?]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002763</guid>
        <pubDate>Wed, 02 Jul 2008 16:20:25 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002763</link>
        <description><![CDATA[B.V.: Ну, если ты это называешь решением... то да.]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002683</guid>
        <pubDate>Wed, 02 Jul 2008 15:08:29 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002683</link>
        <description><![CDATA[Артур: В общем, родил такую вот штуку:<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">Option Explicit</div><div class="code_line">&nbsp;</div><div class="code_line">Private Declare Function ArrPtr Lib &quot;msvbvm60&quot; Alias &quot;VarPtr&quot; (ByRef pArr() As Any) As Long</div><div class="code_line">Private Declare Sub GetMem4 Lib &quot;msvbvm60&quot; (ByVal pSrc As Long, ByVal pDst As Long)</div><div class="code_line">Public Declare Function PutMem4 Lib &quot;msvbvm60&quot; (ByVal pDst As Long, ByVal NewValue As Long) As Long</div><div class="code_line">&nbsp;</div><div class="code_line">&#39;_____________________________________________________________________________________________________</div><div class="code_line">&nbsp;</div><div class="code_line">Public Function stringIsBytes(s As String, b() As Byte) As Long &#39;функция будет возвращать адрес данных массива до подмены </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;(или ноль, если массив уже привязан к строке)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim pSa As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 ArrPtr(b), VarPtr(pSa) &#39;в pSa получить адрес на SAFEARRAY массива</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;If pSa = 0 Then &#39;массив ещё не проредимлен</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ReDim b(0) As Byte</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;b(0) = 98 &#39;чтобы перед уничтожением проверить, а вернулись ли данные на место. Потом закомментирую</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;GetMem4 ArrPtr(b), VarPtr(pSa)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Dim pOld As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;GetMem4 (pSa + 12), VarPtr(pOld) &#39;запоминаем данные по этому адресу (потому что мы их сейчас перепишем)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;stringIsBytes = pOld &#39;функция возвращает адрес старых данных</div><div class="code_line">&nbsp;&nbsp; &nbsp;End If</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim pStr As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;pStr = StrPtr(s) &#39; адрес данных строки</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 VarPtr(pStr), (pSa + 12) &#39;подмена данных массива данными строки</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;PutMem4 pSa + 16, LenB(s) &#39;записать длинну массива в SAFEARRAY.rgsabound.cElements</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">End Function</div><div class="code_line">&nbsp;</div><div class="code_line">&#39;_____________________________________________________________________________________________________</div><div class="code_line">&nbsp;</div><div class="code_line">Public Sub DestroySAFEARRAY(b() As Byte, pOld As Long)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Dim pSa As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;GetMem4 ArrPtr(b), VarPtr(pSa) &#39;получаем адрес SAFEARRAY</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;If pSa Then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;GetMem4 VarPtr(pOld), (pSa + 12) &nbsp;&#39; записываем старые данные на место</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;PutMem4 pSa + 16, 1 &#39; записываем старую длинну (у нас был там всего один меченый байт)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Debug.Print b(0) &#39;проверяем, вернулись ли старые данные на место (должно быть 98)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Erase b</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;End If</div><div class="code_line">End Sub</div></ol></div></div></div></div><br>
<br>
Специально пометил неприкаянный байт перед подменой, чтобы проверить, вернётся ли он на место перед уничтожением. Вернулся. Вроде бы, вопрос решён?]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002615</guid>
        <pubDate>Wed, 02 Jul 2008 14:03:00 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002615</link>
        <description><![CDATA[B.V.: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2002607'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T13:58:02+00:00">02.07.08, 13:58</time></span><div class='quote '>А от чего это зависит?</div></div><br>
<br>
От того, чем выделялась память.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2002607'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T13:58:02+00:00">02.07.08, 13:58</time></span><div class='quote '>А эта пристёгнутая структура должна же будет где-то жить? Под неё же тоже нужно выделять память? а потом и удалять? и всё это во что-то запоминать?</div></div><br>
<br>
Ну разумеется.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2002607'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T13:58:02+00:00">02.07.08, 13:58</time></span><div class='quote '>Может, лучше этот способ?</div></div><br>
<br>
Можешь сделать так.]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002607</guid>
        <pubDate>Wed, 02 Jul 2008 13:58:02 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002607</link>
        <description><![CDATA[Артур: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2002563'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>B.V. &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T13:30:25+00:00">02.07.08, 13:30</time></span><div class='quote '>Можно, конечно. Только надо знать, чем (CoTaskMemFree/LocalFree/HeapFree...).</div></div><br>
А от чего это зависит?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2002563'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>B.V. &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T13:30:25+00:00">02.07.08, 13:30</time></span><div class='quote '>GetMem4 pMySA, ArrPtr(bArr)</div></div>А эта пристёгнутая структура должна же будет где-то жить? Под неё же тоже нужно выделять память? а потом и удалять? и всё это во что-то запоминать?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2002512'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T12:55:39+00:00">02.07.08, 12:55</time></span><div class='quote '>может, запоминать адрес данных массива после redim b(0) и до подмены данных? А затем вместо уничтожения возврощать b исходное состояние</div></div>Может, лучше этот способ? Или с ним что-нибудь не так?]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002563</guid>
        <pubDate>Wed, 02 Jul 2008 13:30:25 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002563</link>
        <description><![CDATA[B.V.: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2002512'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T12:55:39+00:00">02.07.08, 12:55</time></span><div class='quote '>Ну а если самому заполнить структуру - как её потом пристегнуть к массиву-то?</div></div><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">GetMem4 pMySA, ArrPtr(bArr)</div></ol></div></div></div></div><br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2002512'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T12:55:39+00:00">02.07.08, 12:55</time></span><div class='quote '>А может всё же можно как-нибудь вручную освободить этот единственный байт - ведь его адрес известен?</div></div><br>
<br>
Можно, конечно. Только надо знать, чем (CoTaskMemFree/LocalFree/HeapFree...).]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002512</guid>
        <pubDate>Wed, 02 Jul 2008 12:55:39 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002512</link>
        <description><![CDATA[Артур: <strong class='tag-b'>B.V.</strong><br>
Вроде бы, как раз изменяет - после неё массив пуст. Ну а если самому заполнить структуру - как её потом пристегнуть к массиву-то?<br>
<br>
А может всё же можно как-нибудь вручную освободить этот единственный байт - ведь его адрес известен? Как вариант борьбы с моветоном: может, запоминать адрес данных массива после redim b(0) и до подмены данных? А затем вместо уничтожения возврощать b исходное состояние. Тогда ведь он сам уничтожится без всякой утечки?]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002350</guid>
        <pubDate>Wed, 02 Jul 2008 11:17:33 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002350</link>
        <description><![CDATA[B.V.: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2002271'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T09:58:55+00:00">02.07.08, 09:58</time></span><div class='quote '>один неприкаяный байт прога как-нибудь переживёт</div></div><br>
<br>
Это уже моветон. Утечек допускать нельзя.<br>
<br>
Еще раз по поводу всей этой затеи с массивом и строкой... если SafeArrayDestroyData освобождает только данные, не изменяя остальные поля структуры, то делай себе ReDim на здоровье (разумеется, перед вызовом SafeArrayDestroyData). Если же SafeArrayDestroyData все-таки изменяет остальные поля -- то<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2002136'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>B.V. &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T08:35:58+00:00">02.07.08, 08:35</time></span><div class='quote '>Надо объявить структуру SAFEARRAY, выделить под неё память, присвоить указатель, ручками проинициализировать</div></div>]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002271</guid>
        <pubDate>Wed, 02 Jul 2008 09:58:55 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002271</link>
        <description><![CDATA[Артур: <strong class='tag-b'>B.V.</strong><br>
Мне кажется, что после redim b(0) все поля, кроме длинны массива, уже нормально проинициализованы. Длину я могу вписать <span class="tag-font" data-value="Courier" style="font-family:Courier">PutMem4 pSa + 16, LenB(s)</span> А один неприкаяный байт прога как-нибудь переживёт.<br>
<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">Public Sub stringIsBytes(s As String, b() As Byte)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim psa As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 ArrPtr(b), VarPtr(psa) &#39;в pSa получить адрес SAFEARRAY</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;If psa = 0 Then &#39;массив ещё не проредимлен</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ReDim b(0) As Byte</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;GetMem4 ArrPtr(b), VarPtr(psa)</div><div class="code_line">&nbsp;&nbsp; &nbsp;End If</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim pStr As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;pStr = StrPtr(s) &#39; адрес данных строки</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 VarPtr(pStr), (psa + 12) &#39;подмена данных массива данными строки</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;PutMem4 psa + 16, LenB(s) &#39;записать длинну массива в SAFEARRAY.rgsabound.cElements</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">End Sub</div></ol></div></div></div></div><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">Public Sub DestroySAFEARRAY(b() As Byte)</div><div class="code_line">&nbsp;&nbsp;Dim pSa As Long, pAr As Long</div><div class="code_line">&nbsp;&nbsp;pAr = ArrPtr(b)</div><div class="code_line">&nbsp;&nbsp;GetMem4 pAr, VarPtr(pSa)</div><div class="code_line">&nbsp;&nbsp;If pSa Then</div><div class="code_line">&nbsp;&nbsp; &nbsp;SafeArrayDestroyDescriptor ByVal pSa</div><div class="code_line">&nbsp;&nbsp; &nbsp;PutMem4 pAr, 0</div><div class="code_line">&nbsp;&nbsp;End If</div><div class="code_line">End Sub</div></ol></div></div></div></div><br>
<br>
А до того, как байт станет неприкаеным, мы ведь можем узнать, где он лежит - может его можно освободить как-нибудь вручную?]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002136</guid>
        <pubDate>Wed, 02 Jul 2008 08:35:58 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002136</link>
        <description><![CDATA[B.V.: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2002115'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T08:18:54+00:00">02.07.08, 08:18</time></span><div class='quote '>а те, что мы самы выделили, остаются где-то в пустоте. Правильно понял?</div></div><br>
<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="2008-07-02T08:39:23+00:00">02.07.08, 08:39</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2002115'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T08:18:54+00:00">02.07.08, 08:18</time></span><div class='quote '>Значит, LenB(s) нужно записать в SAFEARRAY.rgsabound.cElements? так что ли? </div></div><br>
<br>
Вот тут не уверен. Не уверен, что SafeArrayDestroyData затирает это поле.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2002115'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T08:18:54+00:00">02.07.08, 08:18</time></span><div class='quote '>Вроде, работает. Не редимить совсем не получилось - у пустого массива pSa=0 </div></div><br>
<br>
Надо объявить структуру SAFEARRAY, выделить под неё память, присвоить указатель, ручками проинициализировать... Слушай, а оно тебе надо?]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002115</guid>
        <pubDate>Wed, 02 Jul 2008 08:18:54 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002115</link>
        <description><![CDATA[Артур: Кажется, я понял. После редима мы выделяем под массив LenB(s) - 1 байт. После подмены указателя наш массив ссылается уже на другие данные, а те, что мы самы выделили, остаются где-то в пустоте. Правильно понял?<br>
<br>
Значит,  LenB(s) нужно записать в SAFEARRAY.rgsabound.cElements? так что ли? <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="2008-07-02T08:33:15+00:00">02.07.08, 08:33</time></span></span><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">Public Sub stringIsBytes(s As String, b() As Byte)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Erase b</div><div class="code_line">&#39; &nbsp; &nbsp; &nbsp;ReDim b(LenB(s) - 1) As Byte</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ReDim b(0) As Byte</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim pSa As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 ArrPtr(b), VarPtr(pSa)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim pStr As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;pStr = StrPtr(s)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 VarPtr(pStr), (pSa + 12)</div><div class="code_line">&nbsp;&nbsp; &nbsp;PutMem4 pSa + 16, LenB(s)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">End Sub</div></ol></div></div></div></div><br>
Вроде, работает. Не редимить совсем не получилось - у пустого массива pSa=0]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002106</guid>
        <pubDate>Wed, 02 Jul 2008 08:13:03 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002106</link>
        <description><![CDATA[ANDLL: Нет, я про ту память которую выделил Redim]]></description>
        <author>ANDLL</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002095</guid>
        <pubDate>Wed, 02 Jul 2008 08:06:36 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002095</link>
        <description><![CDATA[Артур: <strong class='tag-b'>ANDLL</strong><br>
Но ведь это та же самая память, которая в строке - она не освободится вместе со строкой?]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002087</guid>
        <pubDate>Wed, 02 Jul 2008 08:00:14 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002087</link>
        <description><![CDATA[ANDLL: Ну видимо тем что после каждой такой итерации память куском в LenB(s) - 1 окажется неприкаянной.]]></description>
        <author>ANDLL</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002085</guid>
        <pubDate>Wed, 02 Jul 2008 07:57:17 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002085</link>
        <description><![CDATA[Артур: <strong class='tag-b'>ANDLL</strong><br>
Ну так раскрой мысль. И почему нельзя - чем черевато?]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002080</guid>
        <pubDate>Wed, 02 Jul 2008 07:53:39 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002080</link>
        <description><![CDATA[ANDLL: Нет, именно так и нельзя.<br>Я же говорю, инициализировать поля структуры лучше без Redim, ручками.]]></description>
        <author>ANDLL</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002068</guid>
        <pubDate>Wed, 02 Jul 2008 07:45:03 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002068</link>
        <description><![CDATA[Артур: <strong class='tag-b'>ANDLL</strong><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">Public Sub stringIsBytes(s As String, b() As Byte)</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Erase b</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ReDim b(LenB(s) - 1) As Byte</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim psa As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 ArrPtr(b), VarPtr(psa)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim pStr As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;pStr = StrPtr(s)</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 VarPtr(pStr), (psa + 12)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">End Sub</div></ol></div></div></div></div>]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002041</guid>
        <pubDate>Wed, 02 Jul 2008 07:21:42 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002041</link>
        <description><![CDATA[ANDLL: Нет народ, то что вы намутили с SafeArrayDestroyData  - глупость.<br>Нужно вместо redim использовать Erase (для очистки от старых данных если они были) а затем ручками выставлять все поля структуры.]]></description>
        <author>ANDLL</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002032</guid>
        <pubDate>Wed, 02 Jul 2008 07:17:00 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2002032</link>
        <description><![CDATA[B.V.: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2001981'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T06:49:56+00:00">02.07.08, 06:49</time></span><div class='quote '>А строки устроены не так, как байтовые массивы? в смысле, у них нет SAFEARRAY?</div></div><br>
<br>
<a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=165248' target='_blank'>[Общее] Устройство некоторых типов данны</a><br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2001981'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T06:49:56+00:00">02.07.08, 06:49</time></span><div class='quote '>Но данные в b() не пропадают. Интересно, почему</div></div><br>
<br>
Вероятно, потому, что память не затирается при удалении, а просто помечается как свободная.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2001981'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T06:49:56+00:00">02.07.08, 06:49</time></span><div class='quote '>есть подозрение, что они просто помечаются как неиспользуемые и через какое-то время в них может оказаться что-то совсем левое</div></div><br>
<br>
Весьма вероятно :)<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2001981'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-02T06:49:56+00:00">02.07.08, 06:49</time></span><div class='quote '>SafeArrayDestroyData попробовал прикрутить так:</div></div><br>
<br>
Я SafeArrayDestroyData предложил просто как вариант. Я не знаю, стоит (и можно) ли её тут использовать или нет.]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2001981</guid>
        <pubDate>Wed, 02 Jul 2008 06:49:56 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2001981</link>
        <description><![CDATA[Артур: <strong class='tag-b'>B.V.</strong><br>
Спасибо&#33; Даже уже почти понял. А строки устроены не так, как байтовые массивы? в смысле, у них нет SAFEARRAY?<br>
<br>
Насчёт редимов методом тыка выяснил следующее: если обнулить или переписать строку, связь прерывается (как мне объяснили, под строку выделяется новый адрес и новый участок памяти). Но данные в b() не пропадают. Интересно, почему - ведь если обычную строку обнулить, данные в ней вроде как должны очиститься? Если редимить b(), то связь сохраняется, но строка не увеличивается (это вроде бы понятно), но и не уменьшается - получается, данные опять же не очищаются? (есть подозрение, что они просто помечаются как неиспользуемые и через какое-то время в них может оказаться что-то совсем левое?) <br>
<br>
SafeArrayDestroyData попробовал прикрутить так:<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">Public Sub stringIsBytes(s As String, b() As Byte)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ReDim b(LenB(s) - 1) As Byte</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim psa As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 ArrPtr(b), VarPtr(psa)</div><div class="code_line">&nbsp;&nbsp; &nbsp;SafeArrayDestroyData ByVal psa</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim pStr As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;pStr = StrPtr(s)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 VarPtr(pStr), (psa + 12)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">End Sub</div></ol></div></div></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="2008-07-02T07:14:40+00:00">02.07.08, 07:14</time></span></span><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">Public Sub stringIsBytes(s As String, b() As Byte)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim psa As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 ArrPtr(b), VarPtr(psa)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;If psa Then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SafeArrayDestroyData ByVal psa</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ReDim b(LenB(s) - 1) As Byte</div><div class="code_line">&nbsp;&nbsp; &nbsp;Else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ReDim b(LenB(s) - 1) As Byte</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;GetMem4 ArrPtr(b), VarPtr(psa)</div><div class="code_line">&nbsp;&nbsp; &nbsp;End If</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim pStr As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;pStr = StrPtr(s)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 VarPtr(pStr), (psa + 12)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">End Sub</div></ol></div></div></div></div>]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2001553</guid>
        <pubDate>Tue, 01 Jul 2008 17:53:26 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2001553</link>
        <description><![CDATA[B.V.: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2001529'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-01T17:38:27+00:00">01.07.08, 17:38</time></span><div class='quote '>А как это работает, не расскажешь?</div></div><br>
<br>
Все уже рассказано в тех статьях, к которым тебя направили. Если коротко -- из указателя на указатель на SAFEARRAY я получаю указатель на SAFEARRAY, затем просто копирую в SAFEARRAY::pvData указатель на строку.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=241951&view=findpost&p=2001529'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Артур &#064; <time class="tag-quote__quoted-time" datetime="2008-07-01T17:38:27+00:00">01.07.08, 17:38</time></span><div class='quote '>Что такое 12?</div></div><br>
<br>
Это смещение, по которому находится pvData (указатель на данные).<br>
<br>
Единственное, что не помешало бы проверить -- чему равен pvData сразу после ReDim. Если он указывает на данные, то их, наверно, надо как-то освобождать перед подменой указателя (SafeArrayDestroyData?).]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2001529</guid>
        <pubDate>Tue, 01 Jul 2008 17:38:27 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2001529</link>
        <description><![CDATA[Артур: Бинго&#33; Здорово&#33;&#33;&#33;<br>
<br>
А как это работает, не расскажешь? Секрет фонкуса, так сказать? <br>
<br>
Что такое 12? какой-то сдвиг в три лонга? <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">Public Sub stringIsBytes(s As String, b() As Byte)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ReDim b(LenB(s) - 1) As Byte</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim pSA As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 ArrPtr(b), VarPtr(pSA)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim pStr As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;pStr = StrPtr(s)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 VarPtr(pStr), (pSA + 12)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">End Sub</div></ol></div></div></div></div><br>
<br>
Надо ли как-то по-особенному обращаться с полученным массивом (как-нибудь не просто так удалять или ещё чего)?]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2001315</guid>
        <pubDate>Tue, 01 Jul 2008 13:37:03 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2001315</link>
        <description><![CDATA[B.V.: Фокус:<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">Option Explicit</div><div class="code_line">&nbsp;</div><div class="code_line">Private Declare Function ArrPtr Lib &quot;msvbvm60&quot; Alias &quot;VarPtr&quot; (ByRef pArr() As Any) As Long</div><div class="code_line">Private Declare Sub GetMem4 Lib &quot;msvbvm60&quot; (ByVal pSrc As Long, ByVal pDst As Long)</div><div class="code_line">&nbsp;</div><div class="code_line">Private Sub Form_Load()</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim bArr(0 To 23) As Byte</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim strFoo As String</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim pSA As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;strFoo = &quot;some text&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 ArrPtr(bArr), VarPtr(pSA)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim pStr As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;pStr = StrPtr(strFoo)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 VarPtr(pStr), (pSA + 12)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;bArr(2) = Asc(&quot;n&quot;)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;MsgBox strFoo</div><div class="code_line">End Sub</div></ol></div></div></div></div><br>
<br>
Аплодисменты...]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2001118</guid>
        <pubDate>Tue, 01 Jul 2008 11:00:21 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2001118</link>
        <description><![CDATA[Артур: <strong class='tag-b'>B.V.</strong><br>
Там направили. Правда, как раз туда, откуда у меня сама мысль появилась.<br>
<br>
А чё, если в одном месте спросил, в другом уже нельзя спрашивать?]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2001114</guid>
        <pubDate>Tue, 01 Jul 2008 10:55:23 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2001114</link>
        <description><![CDATA[B.V.: Неужели на VBS не ответили?]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2001102</guid>
        <pubDate>Tue, 01 Jul 2008 10:47:40 +0000</pubDate>
        <title>Как устроить такой фокус: строка как байтовый массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=241951&amp;view=findpost&amp;p=2001102</link>
        <description><![CDATA[Артур: Возможно ли, и как, если возможно, проделать такой фокус: чтобы некая переменная-строка и некая переменная - массив байтов ссылались на один и тот же участок памяти? Чтобы изменение байтового массива было бы одновременно и изменением строки? <br><br>На сколько я понимаю, такое должно получиться, если та и другая переменная будут пользоваться одним и тем же указателем... Я правильно понимаю?]]></description>
        <author>Артур</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	