<?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=163685&amp;view=findpost&amp;p=1387508</guid>
        <pubDate>Fri, 22 Dec 2006 16:01:56 +0000</pubDate>
        <title>Узнать проинициализированность массива</title>
        <link>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1387508</link>
        <description><![CDATA[ALXR: Без On Error <strong class='tag-b'>Goto</strong>, и без API - еще меньше: <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">Function IsArrayExists(vArr()) As Boolean</div><div class="code_line">On Error Resume Next</div><div class="code_line">IsArrayExists = True</div><div class="code_line">If Ubound(vArr) = 0 Then If Err.Number = 9 Then Err.Clear: IsArrayExists = False</div><div class="code_line">End Function</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
В 3 строки. :)<br>
PS: Пояснение: Если при вычислении UBound(vArr) произошла ошибка, то блок внутри выполняется всегда - без проверки условия.<br>
PPS: А некорректность в возникновении ошибки, как бы правильно ее не обрабатывали. Некрасиво, короче говоря. ;)]]></description>
        <author>ALXR</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1387280</guid>
        <pubDate>Fri, 22 Dec 2006 13:22:05 +0000</pubDate>
        <title>Узнать проинициализированность массива</title>
        <link>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1387280</link>
        <description><![CDATA[SV(): Возможно некорректно поставил вопрос, т.к. не разбирался в теме досконально  :unsure: <br>
Увидел, так удивился что сразу спросил.<br>
<strong class='tag-b'>SCINER</strong> привёл код около 90 строк, + API<br>
Ваш вариант - около 40 строк, + API<br>
мой вариант - около 15 строк и никакого API<br>
<br>
А если кто-то готов писать столько кода для того чтобы не использовать вариант с On Error GoTo, значит этот подход имеет недостатки (мне неизвестные). Вот я и спросил: Что здесь не так?<br>
<br>
З.Ы. Или это все было просто из спортивного интереса?  :D]]></description>
        <author>SV()</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1387068</guid>
        <pubDate>Fri, 22 Dec 2006 11:59:46 +0000</pubDate>
        <title>Узнать проинициализированность массива</title>
        <link>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1387068</link>
        <description><![CDATA[B.V.: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=163685&view=findpost&p=1387008'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>SV() &#064; <time class="tag-quote__quoted-time" datetime="2006-12-22T11:38:17+00:00">22.12.06, 11:38</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=163685&amp;view=findpost&amp;p=1387008</guid>
        <pubDate>Fri, 22 Dec 2006 11:38:17 +0000</pubDate>
        <title>Узнать проинициализированность массива</title>
        <link>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1387008</link>
        <description><![CDATA[SV(): :blink: <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 Function ExArr(arr) As Boolean</div><div class="code_line">Dim x As Long</div><div class="code_line">On Error GoTo oppa</div><div class="code_line">x = UBound(arr)</div><div class="code_line">ExArr = True</div><div class="code_line">Exit Function</div><div class="code_line">oppa:</div><div class="code_line">ExArr = False</div><div class="code_line">If Err.Number &#60;&#62; 9 Then</div><div class="code_line">&nbsp;&nbsp; &nbsp;MsgBox &quot;Неожиданная ошибка! Номер: &quot; &amp; Err.Number &amp; &quot;; Описание: &quot; &amp; Err.Description</div><div class="code_line">End If</div><div class="code_line">End Function</div></ol></div></div></div></div>Что у меня не так?]]></description>
        <author>SV()</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1365573</guid>
        <pubDate>Mon, 04 Dec 2006 21:53:57 +0000</pubDate>
        <title>Узнать проинициализированность массива</title>
        <link>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1365573</link>
        <description><![CDATA[Змей(Чёрный): <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>SCINER, 04.12.2006, 22:50:17, 1365531</span><div class='quote '>Function ArrayExists(ar) As Boolean</div></div><br>
справедливости ради, хотелось бы отметить, что с точки зрения &quot;правильного стиля&quot; следовало бы написАть &quot;<span class="tag-color tag-color-named" data-value="blue" style="color: blue">Function ArrayExists(ar <strong class='tag-b'>As Variant</strong>) As Boolean</span>&quot;, а не полагаться на то, что тип Variant является типом-по-умолчанию-для-неявного-объявления.]]></description>
        <author>Змей(Чёрный)</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1365564</guid>
        <pubDate>Mon, 04 Dec 2006 21:36:03 +0000</pubDate>
        <title>Узнать проинициализированность массива</title>
        <link>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1365564</link>
        <description><![CDATA[B.V.: <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">&#39;SAFEARRAY** (указатель на указатель на SAFEARRAY, для всех типов кроме String)</div><div class="code_line">Private Declare Function ArrPtr Lib &quot;msvbvm60&quot; Alias &quot;VarPtr&quot; (Arr() As Any) As Long</div><div class="code_line">&#39;Аналог RtlMoveMemory на 4 байта</div><div class="code_line">Private Declare Function GetMem4 Lib &quot;msvbvm60&quot; (ByVal pSrc As Long, ByVal pDst As Long) As Long</div><div class="code_line">&#39;Копирование участка памяти (что не очевидно из названия функции :) )</div><div class="code_line">Private Declare Sub RtlMoveMemory Lib &quot;kernel32&quot; (ByVal Destination As Any, ByVal Source As Any, ByVal Length As Long)</div><div class="code_line">&nbsp;</div><div class="code_line">Private StringArray() As String</div><div class="code_line">Private LongArray() As Long</div><div class="code_line">Private DoubleArray() As Double</div><div class="code_line">&nbsp;</div><div class="code_line">Private Sub Form_Load()</div><div class="code_line">&nbsp;&nbsp; &nbsp;ReDim LongArray(255) As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;MsgBox ArrayExists(StrArrPtr(StringArray)) &amp; vbTab &amp; ArrayExists(ArrPtr(LongArray)) &amp; _</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;vbTab &amp; ArrayExists(ArrPtr(DoubleArray))</div><div class="code_line">End Sub</div><div class="code_line">&nbsp;</div><div class="code_line">&#39;SAFEARRAY* (указатель на SAFEARRAY)</div><div class="code_line">Private Function ArrayExists(ByVal ArrPt As Long) As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 ArrPt, VarPtr(ArrayExists)</div><div class="code_line">End Function</div><div class="code_line">&nbsp;</div><div class="code_line">&#39;SAFEARRAY** (для массива типа String)</div><div class="code_line">Private Function StrArrPtr(ByRef Arr() As String, Optional ByVal IgnoreMe As Long = 0) As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;GetMem4 VarPtr(IgnoreMe) - 4, VarPtr(StrArrPtr)</div><div class="code_line">End Function</div><div class="code_line">&nbsp;</div><div class="code_line">&#39;Универсальная функция получения указателя</div><div class="code_line">&#39;Можно использовать вместо VarPtr, ArrPtr, StrArrPtr</div><div class="code_line">&#39;А так же для &#39;User-defined type&#39; массивов</div><div class="code_line">Public Function AnyPtr(ByRef Var As Variant) As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;RtlMoveMemory VarPtr(AnyPtr), VarPtr(Var) + 1, 1</div><div class="code_line">&nbsp;&nbsp; &nbsp;If AnyPtr = 64 Or AnyPtr = 96 Then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;RtlMoveMemory VarPtr(AnyPtr), VarPtr(Var) + 8, 4</div><div class="code_line">&nbsp;&nbsp; &nbsp;End If</div><div class="code_line">End Function</div></ol></div></div></div></div>]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1365545</guid>
        <pubDate>Mon, 04 Dec 2006 21:02:15 +0000</pubDate>
        <title>Узнать проинициализированность массива</title>
        <link>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1365545</link>
        <description><![CDATA[SCINER: Соответственно, функции(на основе предыдущей) определяющие размерность массивов любых типов, без генерации ошибок:<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">Function LBoundEx(v) As Long</div><div class="code_line">&nbsp;&nbsp;If ArrayExists(v) Then</div><div class="code_line">&nbsp;&nbsp; &nbsp;LBoundEx = LBound(v)</div><div class="code_line">&nbsp;&nbsp;Else</div><div class="code_line">&nbsp;&nbsp; &nbsp;LBoundEx = -1</div><div class="code_line">&nbsp;&nbsp;End If</div><div class="code_line">End Function</div><div class="code_line">&nbsp;</div><div class="code_line">Function UBoundEx(v) As Long</div><div class="code_line">&nbsp;&nbsp;If ArrayExists(v) Then</div><div class="code_line">&nbsp;&nbsp; &nbsp;UBoundEx = UBound(v)</div><div class="code_line">&nbsp;&nbsp;Else</div><div class="code_line">&nbsp;&nbsp; &nbsp;UBoundEx = -1</div><div class="code_line">&nbsp;&nbsp;End If</div><div class="code_line">End Function</div></ol></div></div></div></div>]]></description>
        <author>SCINER</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1365531</guid>
        <pubDate>Mon, 04 Dec 2006 20:50:17 +0000</pubDate>
        <title>Узнать проинициализированность массива</title>
        <link>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1365531</link>
        <description><![CDATA[SCINER: ok, тогда так:<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 Sub CopyMemoryArray Lib &quot;kernel32&quot; Alias &quot;RtlMoveMemory&quot; (Destination As Any, Source() As Any, ByVal Length As Long)</div><div class="code_line">&nbsp;</div><div class="code_line">Function ArrayExists(ar) As Boolean</div><div class="code_line">&nbsp;&nbsp;Dim lRet As Long</div><div class="code_line">&nbsp;&nbsp;Dim B() As Byte</div><div class="code_line">&nbsp;&nbsp;Dim I() As Integer</div><div class="code_line">&nbsp;&nbsp;Dim L() As Long</div><div class="code_line">&nbsp;&nbsp;Dim D() As Double</div><div class="code_line">&nbsp;&nbsp;Dim S() As String</div><div class="code_line">&nbsp;&nbsp;Dim N() As Single</div><div class="code_line">&nbsp;&nbsp;Dim C() As Currency</div><div class="code_line">&nbsp;&nbsp;Dim T() As Date</div><div class="code_line">&nbsp;&nbsp;Dim V() As Variant</div><div class="code_line">&nbsp;&nbsp;Select Case TypeName(ar)</div><div class="code_line">&nbsp;&nbsp;Case &quot;Byte()&quot;: B = ar: Call CopyMemoryArray(lRet, B, 4)</div><div class="code_line">&nbsp;&nbsp;Case &quot;Integer()&quot;: I = ar: Call CopyMemoryArray(lRet, I, 4)</div><div class="code_line">&nbsp;&nbsp;Case &quot;Long()&quot;: L = ar: Call CopyMemoryArray(lRet, L, 4)</div><div class="code_line">&nbsp;&nbsp;Case &quot;Double()&quot;: D = ar: Call CopyMemoryArray(lRet, D, 4)</div><div class="code_line">&nbsp;&nbsp;Case &quot;String()&quot;: S = ar: Call CopyMemoryArray(lRet, S, 4)</div><div class="code_line">&nbsp;&nbsp;Case &quot;Single()&quot;: N = ar: Call CopyMemoryArray(lRet, N, 4)</div><div class="code_line">&nbsp;&nbsp;Case &quot;Currency()&quot;: C = ar: Call CopyMemoryArray(lRet, C, 4)</div><div class="code_line">&nbsp;&nbsp;Case &quot;Date()&quot;: T = ar: Call CopyMemoryArray(lRet, T, 4)</div><div class="code_line">&nbsp;&nbsp;Case &quot;Variant()&quot;: V = ar: Call CopyMemoryArray(lRet, V, 4)</div><div class="code_line">&nbsp;&nbsp;End Select</div><div class="code_line">&nbsp;&nbsp;ArrayExists = lRet &#60;&#62; 0</div><div class="code_line">End Function</div><div class="code_line">&nbsp;</div><div class="code_line">Private Sub Form_Load()</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;Dim lRet As Long</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;Dim B() As Byte</div><div class="code_line">&nbsp;&nbsp;Dim I() As Integer</div><div class="code_line">&nbsp;&nbsp;Dim L() As Long</div><div class="code_line">&nbsp;&nbsp;Dim D() As Double</div><div class="code_line">&nbsp;&nbsp;Dim S() As String</div><div class="code_line">&nbsp;&nbsp;Dim N() As Single</div><div class="code_line">&nbsp;&nbsp;Dim C() As Currency</div><div class="code_line">&nbsp;&nbsp;Dim T() As Date</div><div class="code_line">&nbsp;&nbsp;Dim V() As Variant</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(B)</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(I)</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(L)</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(D)</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(S)</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(N)</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(C)</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(T)</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(V)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;ReDim B(0)</div><div class="code_line">&nbsp;&nbsp;ReDim I(0)</div><div class="code_line">&nbsp;&nbsp;ReDim L(0)</div><div class="code_line">&nbsp;&nbsp;ReDim D(0)</div><div class="code_line">&nbsp;&nbsp;ReDim S(0)</div><div class="code_line">&nbsp;&nbsp;ReDim N(0)</div><div class="code_line">&nbsp;&nbsp;ReDim C(0)</div><div class="code_line">&nbsp;&nbsp;ReDim T(0)</div><div class="code_line">&nbsp;&nbsp;ReDim V(0)</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;Print vbNullString</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(B)</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(I)</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(L)</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(D)</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(S)</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(N)</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(C)</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(T)</div><div class="code_line">&nbsp;&nbsp;Print ArrayExists(V)</div><div class="code_line">&nbsp;</div><div class="code_line">End Sub</div></ol></div></div></div></div>]]></description>
        <author>SCINER</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1365519</guid>
        <pubDate>Mon, 04 Dec 2006 20:29:13 +0000</pubDate>
        <title>Узнать проинициализированность массива</title>
        <link>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1365519</link>
        <description><![CDATA[B.V.: Справедливости ради скажу, что метод описан и уже давно опубликован в этой статье: http://vbstreets.ru/VB/Articles/65977.aspx]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1365494</guid>
        <pubDate>Mon, 04 Dec 2006 19:52:51 +0000</pubDate>
        <title>Узнать проинициализированность массива</title>
        <link>https://forum.sources.ru/index.php?showtopic=163685&amp;view=findpost&amp;p=1365494</link>
        <description><![CDATA[SCINER: Вот так можно узнать проинициализированность байтового массива:<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">&nbsp;&nbsp;Dim B() As Byte</div><div class="code_line">&nbsp;&nbsp;MsgBox StrPtr(B)</div></ol></div></div></div></div><br>
Но я нашел и более универсальный способ, для проверки массива любого типа: код обновлен и приведен ниже...]]></description>
        <author>SCINER</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	