<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: как получить адрес переменной внутри класса]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=13604&amp;type=atom" />
	<updated>2018-04-09T10:09:57Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=13604</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как получить адрес переменной внутри класса]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124551#p124551" />
			<content type="html"><![CDATA[<p>Решил проблему, создав в классе такую функцию:<br /></p><div class="codebox"><pre><code>
binary(func, ptr=0,len=0) {
		static bin,size:=16
		if (func=&quot;getptr&quot;) {
			return &amp;bin
		} else if (func=&quot;getsize&quot;) {
			return size
		} else if(func=&quot;set&quot;) {
			if(!ptr||!len)
				return 0
			VarSetCapacity(bin, len, 0)
			CopyBinData(ptr, &amp;bin, len)
			size:=len
			return 1
		}
	}
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[MandarinKa02]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34409</uri>
			</author>
			<updated>2018-04-09T10:09:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124551#p124551</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как получить адрес переменной внутри класса]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124550#p124550" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>MandarinKa02 пишет:</cite><blockquote><p>как задать размер</p></blockquote></div><p>В момент создания.</p>]]></content>
			<author>
				<name><![CDATA[stealzy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31937</uri>
			</author>
			<updated>2018-04-09T08:38:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124550#p124550</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как получить адрес переменной внутри класса]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124517#p124517" />
			<content type="html"><![CDATA[<p>Сравнивает строки по алфавитному порядку.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2018-04-06T14:39:38Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124517#p124517</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как получить адрес переменной внутри класса]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124516#p124516" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong>, а что оно сравнивает? Кол-во символов в строках?(вычитал, что такое организовано в питоне)<br />На практике мне не приходилось сравнить строки, только числовые переменные. Да и не знал, что такое может быть.</p>]]></content>
			<author>
				<name><![CDATA[MandarinKa02]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34409</uri>
			</author>
			<updated>2018-04-06T14:34:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124516#p124516</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как получить адрес переменной внутри класса]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124513#p124513" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>MandarinKa02 пишет:</cite><blockquote><div class="quotebox"><blockquote><p>Операторы &gt;&lt; в AHK работают и со строками.</p></blockquote></div><p>Что-то новенькое.</p></blockquote></div><p>Испокон веков работали.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2018-04-06T12:13:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124513#p124513</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как получить адрес переменной внутри класса]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124508#p124508" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Операторы &gt;&lt; в AHK работают и со строками.</p></blockquote></div><p>Что-то новенькое.<br /><strong>stealzy</strong>, спасибо за ответ.</p><p>И ещё один конечный вопрос: как задать размер переменной, используя адрес на эту переменную. Проверял проделать такое с VarSetCapacity(), результат немного не тот.<br /></p><div class="codebox"><pre><code>
data:=&quot;everything&quot;, ptr:=&amp;data
VarSetCapacity(ptr, 128,0) ;задается размер для переменной-указатель
VarSetCapacity(*ptr,128,0) ;разименовывание не робит :(
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[MandarinKa02]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34409</uri>
			</author>
			<updated>2018-04-06T10:33:05Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124508#p124508</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как получить адрес переменной внутри класса]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124503#p124503" />
			<content type="html"><![CDATA[<p>Все логично, вы неправильно думаете о размещении в памяти как о &quot;сдвиге&quot;, это не так. Длина текста не влияет напрямую на размещение, влияет только вмещается ли объем переменной в текущую структуру или нет. И &quot;something&quot;, и &quot;more more more text...&quot; вмещается в размер структуры 64 Кб, остальное не важно.<br /></p><div class="codebox"><pre><code>v1:=&quot;&lt;8&quot;, p1:=&amp;v1

v1:=&quot;12345678&quot; ; под переменную выделяется другое место большей вместимости
p2:=&amp;v1

v1:=&quot;8 &lt;= chars &lt; 64&quot;, p3:=&amp;v1 ; нужды выделять другое место нет - влезает и так

v1:=&quot;64 chars here. iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii&quot;
p4:=&amp;v1

msgbox % p1 &quot; &quot; p2 &quot; &quot; p3 &quot; &quot; p4</code></pre></div><p>Представьте себе склад с полками разной высоты для разных товаров. Каждый товар ставят на полку самой маленкой высоты, где он может поместится. Выделение памяти в си организовано аналогичным образом. Даже если над товаром остается много пустого места, на него сверху ничего не кладут. Это называется выравниванием.</p>]]></content>
			<author>
				<name><![CDATA[stealzy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31937</uri>
			</author>
			<updated>2018-04-05T22:59:28Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124503#p124503</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как получить адрес переменной внутри класса]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124502#p124502" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>MandarinKa02 пишет:</cite><blockquote><div class="quotebox"><blockquote><p>А разве переменные в AHK не являются всегда строками?</p></blockquote></div><p>Та ну, если бы они и были строками, то в таком бы случае не работали операторы &gt;&lt;<br />AHK определяет, что записывают в переменную, строка ли это или может число. И на уровне c++ присваивается тип переменной.<br />(Лично я думаю, что так и происходит)</p></blockquote></div><p>Напрасно думаете. Всегда можно проверить, какие данные в переменной, получив их с помощью NumGet по адресу переменной.<br />Опреаторы &gt;&lt; в AHK работают и со строками.<br /></p><div class="codebox"><pre><code>MsgBox, % (&quot;abc&quot; &gt; &quot;def&quot;) &quot;`n&quot; (&quot;abc&quot; &lt; &quot;def&quot;)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2018-04-05T22:03:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124502#p124502</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как получить адрес переменной внутри класса]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124501#p124501" />
			<content type="html"><![CDATA[<p>В общем, происходит тут что-то странное..<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>
v1:=&quot;something&quot;, p1:=&amp;v1
msgbox % ShowInfo(v1, &quot;v1&quot;, p1)

v1:=&quot;some&quot; ;уменьшаем кол-во байт (по сути адрес переменой должен остаться без сдвига)
p2:=&amp;v1
msgbox % ShowInfo(v1, &quot;v1&quot;, p2) ;убеждаемся в этом :)

v1:=&quot;more more more text...&quot;
p3:=&amp;v1
msgbox % ShowInfo(v1, &quot;v1&quot;, p3) ;а тут что-то пошло не так

msgbox % p1 &quot;-&quot; p2 &quot;-&quot; p3





ShowInfo(var, name, ptr) {
	msg := name &quot;=&quot; var &quot;`n&quot;
	     . &quot;ptr=&quot; ptr &quot;`n&quot;
	     . &quot;size=&quot; StrLen(var)*(A_IsUnicode?2:1) ;т.к. у меня Unicode32, то у меня строка будет весить - (кол-во символов*2)
	return msg
}

F5::Reload
</code></pre></div></div></div><p>А теперь давайте, поменяем немного местами переменные. А вернее, значения.<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>

v1:=&quot;some&quot;, p1:=&amp;v1
msgbox % ShowInfo(v1, &quot;v1&quot;, p1)

v1:=&quot;something&quot; ;происходит сдвиг
p2:=&amp;v1
msgbox % ShowInfo(v1, &quot;v1&quot;, p2) &quot;`n&quot; &quot;Сдвинули на &quot; p2-p1

v1:=&quot;more more more text...&quot;
p3:=&amp;v1
msgbox % ShowInfo(v1, &quot;v1&quot;, p3) &quot;`n&quot; &quot;Сдвинули на &quot; p3-p2

msgbox % p1 &quot;-&quot; p2 &quot;-&quot; p3





ShowInfo(var, name, ptr) {
	msg := name &quot;=&quot; var &quot;`n&quot;
	     . &quot;ptr=&quot; ptr &quot;`n&quot;
	     . &quot;size=&quot; StrLen(var)*(A_IsUnicode?2:1) ;т.к. у меня Unicode32, то у меня строка будет весить - (кол-во символов*2)
	return msg
}

F5::Reload
</code></pre></div></div></div>]]></content>
			<author>
				<name><![CDATA[MandarinKa02]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34409</uri>
			</author>
			<updated>2018-04-05T21:43:14Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124501#p124501</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как получить адрес переменной внутри класса]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124499#p124499" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>А разве переменные в AHK не являются всегда строками?</p></blockquote></div><p>Та ну, если бы они и были строками, то в таком бы случае не работали операторы &gt;&lt;<br />AHK определяет, что записывают в переменную, строка ли это или может число. И на уровне c++ присваивается тип переменной.<br />(Лично я думаю, что так и происходит)</p>]]></content>
			<author>
				<name><![CDATA[MandarinKa02]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34409</uri>
			</author>
			<updated>2018-04-05T21:35:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124499#p124499</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как получить адрес переменной внутри класса]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124498#p124498" />
			<content type="html"><![CDATA[<p>Я конечно неправильно называю это &quot;типами&quot;, потому что не владею терминами, но суть думаю передал.</p>]]></content>
			<author>
				<name><![CDATA[stealzy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31937</uri>
			</author>
			<updated>2018-04-05T21:32:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124498#p124498</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как получить адрес переменной внутри класса]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124497#p124497" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>stealzy пишет:</cite><blockquote><p>Хотя язык AHK и кажется &quot;безтиповым&quot;, типы все-таки внутри есть.</p></blockquote></div><p>А разве переменные в AHK не являются всегда строками? И разве в этом примере меняется тип данных?</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2018-04-05T21:27:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124497#p124497</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как получить адрес переменной внутри класса]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124496#p124496" />
			<content type="html"><![CDATA[<p>Ясненько. Хотя язык AHK и кажется &quot;безтиповым&quot;, типы все-таки внутри есть. Разные типы занимают разное место в памяти.<br />Если вы записываете в переменную значение, которое не влазит в старый тип, она записывается в другую область памяти.<br /></p><div class="codebox"><pre><code>v1:=&quot;text&quot;, p1:=&amp;v1
v1:=&quot;more te&quot;, p2:=&amp;v1 ; &lt; 8 byte
msgbox % p1 &quot;-&quot; p2
v1:=&quot;more text&quot;, p2:=&amp;v1 ; &gt; 8 byte
msgbox % p1 &quot;-&quot; p2</code></pre></div>]]></content>
			<author>
				<name><![CDATA[stealzy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31937</uri>
			</author>
			<updated>2018-04-05T21:15:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124496#p124496</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как получить адрес переменной внутри класса]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124493#p124493" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>У вас уже есть сервер или это для локалки?</p></blockquote></div><p>Я сейчас с пакетами работаю, а мессенджер в качестве примера привел. Но такое в силах организовать :0</p>]]></content>
			<author>
				<name><![CDATA[MandarinKa02]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34409</uri>
			</author>
			<updated>2018-04-05T21:00:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124493#p124493</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как получить адрес переменной внутри класса]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124492#p124492" />
			<content type="html"><![CDATA[<p><strong>stealzy</strong>, да, я заметил ваше сообщение. Сейчас пытаюсь применить.</p><p>&gt; Ссылка на переменную меняется.<br /></p><div class="codebox"><pre><code>
	;CopyBinData() есть в посте выше
	v1:=&quot;text&quot;
	p1:=&amp;v1

	v1:=&quot;more text&quot;
	p2:=&amp;v1
	msgbox % p1 &quot;-&quot; p2

	VarSetCapacity(v1, 100,0)
	var:=&quot;noname&quot;
	CopyBinData(&amp;var, p1, StrLen(var)*2)
	msgbox % v1
	CopyBinData(&amp;var, p2, StrLen(var)*2)
	msgbox % v1
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[MandarinKa02]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34409</uri>
			</author>
			<updated>2018-04-05T20:42:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124492#p124492</id>
		</entry>
</feed>
