<?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=172910&amp;view=findpost&amp;p=1463399</guid>
        <pubDate>Fri, 23 Feb 2007 12:25:57 +0000</pubDate>
        <title>Вопрос по функции CopyMemory</title>
        <link>https://forum.sources.ru/index.php?showtopic=172910&amp;view=findpost&amp;p=1463399</link>
        <description><![CDATA[SCINER: быстрый способ без CopyMemory<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">Private Declare Function GetTickCount Lib &quot;kernel32&quot; () As Long</div><div class="code_line">&nbsp;</div><div class="code_line">Sub Form_Load()</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;Dim Tmp As String</div><div class="code_line">&nbsp;&nbsp;Dim Buff As String</div><div class="code_line">&nbsp;&nbsp;Dim T As Long</div><div class="code_line">&nbsp;&nbsp;Dim i As Long</div><div class="code_line">&nbsp;&nbsp;Dim lPos As Long</div><div class="code_line">&nbsp;&nbsp;Dim dwLen As Long</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;Me.AutoRedraw = True</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;T = GetTickCount</div><div class="code_line">&nbsp;&nbsp;Buff = VBA.Space$(100)</div><div class="code_line">&nbsp;&nbsp;lPos = 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;For i = 0 To 10000</div><div class="code_line">&nbsp;&nbsp; &nbsp;dwLen = 32</div><div class="code_line">&nbsp;&nbsp; &nbsp;Tmp = VBA.String(dwLen, &quot;z&quot;)</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;быстрый способ</div><div class="code_line">&nbsp;&nbsp; &nbsp;If lPos + dwLen &#62; Len(Buff) Then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Buff = Buff &amp; VBA.Space$(Len(Buff) + dwLen)</div><div class="code_line">&nbsp;&nbsp; &nbsp;End If</div><div class="code_line">&nbsp;&nbsp; &nbsp;Mid$(Buff, lPos, dwLen) = Tmp</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;обычная контакенация</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;Buff = Buff &amp; Tmp</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;lPos = lPos + dwLen</div><div class="code_line">&nbsp;&nbsp;Next</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;Buff = VBA.Left$(Buff, lPos)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;T = GetTickCount - T</div><div class="code_line">&nbsp;&nbsp;Print VBA.Format$(T / 1000, &quot;0.000&quot;)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Print FormatNumber(Len(Buff), 0) &amp; &quot; == &quot; &amp; FormatNumber(lPos, 0)</div><div class="code_line">&nbsp;</div><div class="code_line">End Sub</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>SCINER</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=172910&amp;view=findpost&amp;p=1463088</guid>
        <pubDate>Fri, 23 Feb 2007 04:53:28 +0000</pubDate>
        <title>Вопрос по функции CopyMemory</title>
        <link>https://forum.sources.ru/index.php?showtopic=172910&amp;view=findpost&amp;p=1463088</link>
        <description><![CDATA[VazNik: <strong class='tag-b'> 2 Ieo</strong><br>
 Спасибо за подсказку&#33; Как будто пелена с глаз упала... Заодно увидел и еще одну свою ошибку: lOffSet1 = 31&amp; , а надо 30&amp;...<br>
 Задача-то легко решаемая в функциях самого VB:<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">sWork = Space(0)</div><div class="code_line">. &nbsp;. &nbsp;. &nbsp;.</div><div class="code_line">sWork = Mid$(sTablIdent, i1, 1) + sWork</div></ol></div></div></div></div><br>
 Но когда формируешь таким образом более полутора миллионов строк, то начинаешь выгадывать каждую секунду.<br>
 <br>
 Мой дед говорит:&quot;Делай добро и бросай его в воду. Тогда оно само к тебе вернется.&quot; :rolleyes:]]></description>
        <author>VazNik</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=172910&amp;view=findpost&amp;p=1461899</guid>
        <pubDate>Thu, 22 Feb 2007 07:18:49 +0000</pubDate>
        <title>Вопрос по функции CopyMemory</title>
        <link>https://forum.sources.ru/index.php?showtopic=172910&amp;view=findpost&amp;p=1461899</link>
        <description><![CDATA[leo: <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; &nbsp;&#39;lAdrStr1 = lAdrStr1 + lOffSet1 !!! адрес строки не должен изменяться</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#39;lAdrStr2 = lAdrStr2 + lOffSet2 !!! </div><div class="code_line">&nbsp;&nbsp; &nbsp;CopyMemory ByVal (lAdrStr1 + lOffSet1), ByVal (lAdrStr2 + lOffSet2), lTwo</div></ol></div></div></div></div>]]></description>
        <author>leo</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=172910&amp;view=findpost&amp;p=1461750</guid>
        <pubDate>Thu, 22 Feb 2007 02:22:32 +0000</pubDate>
        <title>Вопрос по функции CopyMemory</title>
        <link>https://forum.sources.ru/index.php?showtopic=172910&amp;view=findpost&amp;p=1461750</link>
        <description><![CDATA[VazNik: Help&#33; A need somebody...<br>
<br>
 Люди, подскажите, пожалуйста, что я делаю не так в этой вот функции (нечто вроде Mid&#036; и Replace в одном флаконе):<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">&#39; Описание функции в модуле Main():</div><div class="code_line">&#39;Public Declare Sub CopyMemory Lib &quot;kernel32&quot; Alias &quot;RtlMoveMemory&quot; _</div><div class="code_line">&#39; &nbsp; &nbsp; &nbsp; &nbsp;(pDest As Any, pSource As Any, ByVal ByteLen As Long)</div><div class="code_line">&#39; 32-символьная строка:</div><div class="code_line">&#39;Const sTablIdent As String = &quot;0123456789ABCDEFGHIJKLMNOPQRSTUV&quot;</div><div class="code_line">&#39; &nbsp;Dim dTheartyTwo As Double</div><div class="code_line">&#39; &nbsp;Dim lTwo As Long</div><div class="code_line">&#39; &nbsp;lTwo = 2&amp;</div><div class="code_line">&#39; &nbsp;dTheartyTwo = 32#</div><div class="code_line">Private Function IdentToStr(dPar As Double) As String</div><div class="code_line">&nbsp;&nbsp;Dim d1 As Double, d2 As Double</div><div class="code_line">&nbsp;&nbsp;Dim i As Integer, i1 As Integer</div><div class="code_line">&nbsp;&nbsp;Dim sWork As String</div><div class="code_line">&nbsp;&nbsp;Dim lAdrStr1 As Long, lAdrStr2 As Long, lOffSet1 As Long, lOffSet2 As Long</div><div class="code_line">&nbsp;&nbsp;sWork = Space(15)</div><div class="code_line">&nbsp;&nbsp;lAdrStr1 = StrPtr(sWork)</div><div class="code_line">&nbsp;&nbsp;lOffSet1 = 31&amp;</div><div class="code_line">&nbsp;&nbsp;lAdrStr2 = StrPtr(sTablIdent)</div><div class="code_line">&nbsp;&nbsp;d1 = dPar</div><div class="code_line">&nbsp;&nbsp;For i = 1 To 15</div><div class="code_line">&nbsp;&nbsp; &nbsp;d2 = Int(d1 / dTheartyTwo)</div><div class="code_line">&nbsp;&nbsp; &nbsp;i1 = CInt(d1 - d2 * dTheartyTwo) + 1</div><div class="code_line">&nbsp;&nbsp; &nbsp;lOffSet2 = CLng(d1 - d2 * dTheartyTwo) * lTwo</div><div class="code_line">&nbsp;&nbsp; &nbsp;lOffSet1 = lOffSet1 - lTwo</div><div class="code_line">&nbsp;&nbsp; &nbsp;lAdrStr1 = lAdrStr1 + lOffSet1</div><div class="code_line">&nbsp;&nbsp; &nbsp;lAdrStr2 = lAdrStr2 + lOffSet2</div><div class="code_line">&nbsp;&nbsp; &nbsp;CopyMemory ByVal lAdrStr1, ByVal lAdrStr2, lTwo</div><div class="code_line">&nbsp;&nbsp; &nbsp;d1 = d2</div><div class="code_line">&nbsp;&nbsp;Next</div><div class="code_line">Debug.Print &quot;IdentToStr-dPar=&quot; + Str(dPar)</div><div class="code_line">Debug.Print &quot;IdentToStr-sWork&quot; + sWork</div><div class="code_line">&nbsp;&nbsp;IdentToStr = sWork</div><div class="code_line">End Function</div><div class="code_line">&#39; Debug.Print выдает: &nbsp;IdentToStr-dPar= &#60;число&#62;</div><div class="code_line">&#39; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IdentToStr-Swork= &#60;строка пробелов вместо нужной&#62;</div></ol></div></div></div></div><br>
<br>
 На выходе - та же сторка пробелов вместо нужной выборки из строки sTablIdent.]]></description>
        <author>VazNik</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	