<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: ActiveX из AutoHotkey]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=15703</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=15703&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: ActiveX из AutoHotkey».]]></description>
		<lastBuildDate>Sun, 11 Oct 2020 14:43:14 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: ActiveX из AutoHotkey]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142594#p142594</link>
			<description><![CDATA[<p>Немного упростил.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 11 Oct 2020 14:43:14 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142594#p142594</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ActiveX из AutoHotkey]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142582#p142582</link>
			<description><![CDATA[<p>Ещё интересный вариант с созданием callback-функции из BoundFunc-объекта:<br /></p><div class="codebox"><pre><code>BoundObj := Func(&quot;JoinStrings&quot;).Bind(Ret := [])
Clbk := new BoundFuncCallback(BoundObj, 2, &quot;Fast&quot;)

DllCall(Clbk.addr, &quot;Str&quot;, &quot;Hello, &quot;, &quot;Str&quot;, &quot;World!&quot;)
MsgBox, % Ret[1]

JoinStrings(Ret, pStr1, pStr2) {
   Ret[1] := StrGet(pStr1) . StrGet(pStr2)
   Return true ; при вызове через адрес можно вернуть только число
}

class BoundFuncCallback
{
   __New(BoundFuncObj, paramCount, options := &quot;&quot;) {
      this.pInfo := Object( {BoundObj: BoundFuncObj, paramCount: paramCount} )
      this.addr := RegisterCallback(this.__Class . &quot;._Callback&quot;, options, paramCount, this.pInfo)
   }
   __Delete() {
      ObjRelease(this.pInfo)
      DllCall(&quot;GlobalFree&quot;, &quot;Ptr&quot;, this.addr, &quot;Ptr&quot;)
   }
   _Callback(Params*) {
      Info := Object(A_EventInfo), Args := []
      Loop % Info.paramCount
         Args.Push( NumGet(Params + A_PtrSize*(A_Index - 2)) )
      Return Info.BoundObj.Call(Args*)
   }
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Fri, 09 Oct 2020 20:51:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142582#p142582</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ActiveX из AutoHotkey]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142541#p142541</link>
			<description><![CDATA[<p>А, понял.<br />Спасибо!</p>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 08 Oct 2020 04:21:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142541#p142541</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ActiveX из AutoHotkey]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142540#p142540</link>
			<description><![CDATA[<p>vScalar — не статическая.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 08 Oct 2020 04:10:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142540#p142540</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ActiveX из AutoHotkey]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142539#p142539</link>
			<description><![CDATA[<p>Не вижу разницы:<br /></p><div class="codebox"><pre><code>value := 1.000000000000011
msgbox % numget(_cvScalar(), 0, &quot;double&quot;) == value

_cvScalar()
{
   static value := 1.000000000000011
   VarSetCapacity(vScalar, 8, 0)
   NumPut(value, vScalar, 0, &quot;double&quot;)
   return &amp;vScalar
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 08 Oct 2020 04:06:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142539#p142539</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ActiveX из AutoHotkey]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142538#p142538</link>
			<description><![CDATA[<div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>Helgef, писал, что так нельзя возвращать адрес в локальных функциях.<br /></p><div class="quotebox"><blockquote><p>Local variables are for use only when the function executes. You have no guarantees after the function returns.</p></blockquote></div></blockquote></div><p>Так у меня же не просто локальная, а статическая переменная. Они сохраняются между вызовами функции, для того и предназначены.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Thu, 08 Oct 2020 03:33:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142538#p142538</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ActiveX из AutoHotkey]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142537#p142537</link>
			<description><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Разве это не про значение по умолчанию?<br />Если не указано, то UInt.</p></blockquote></div><p>Нет, там вполне однозначно, по-моему. Если возврата нет, он пустой или пустая строка, тогда возвращается 0. Иначе функция должна возвращать целое.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Thu, 08 Oct 2020 03:29:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142537#p142537</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ActiveX из AutoHotkey]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142534#p142534</link>
			<description><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Возвращение строки ещё вот так работает:<br /></p><div class="codebox"><pre><code>
addr := RegisterCallback(&quot;MyFunc&quot;)
MsgBox, % DllCall(addr, &quot;Str&quot;)

MyFunc() {
    static test := &quot;test&quot;
    Return &amp;test
}
</code></pre></div></blockquote></div><p><strong>Helgef</strong>, писал, что так нельзя возвращать адрес в локальных функциях.<br /></p><div class="quotebox"><blockquote><p>Local variables are for use only when the function executes. You have no guarantees after the function returns. For example, this will fail,</p></blockquote></div><div class="codebox"><pre><code>value := 1.000000000000011
msgbox % numget(_cvScalar(value), 0, &quot;double&quot;) == value

_cvScalar(value)
{
   VarSetCapacity(vScalar, 8, 0)
   NumPut(value, vScalar, 0, &quot;double&quot;)
   return &amp;vScalar
}</code></pre></div><div class="quotebox"><blockquote><p>It fails because when the function returns, it stores an empty string at the address you return, overwriting the first (two) byte(s) with the zero terminator.<br />You can use byref,</p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Thu, 08 Oct 2020 00:08:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142534#p142534</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ActiveX из AutoHotkey]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142530#p142530</link>
			<description><![CDATA[<p>Проще всего через HeapAlloc/HeapReAlloc.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 07 Oct 2020 20:04:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142530#p142530</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ActiveX из AutoHotkey]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142529#p142529</link>
			<description><![CDATA[<p>То есть в коде 43 надо по хорошему перед StrPut проверять размер данных, и если они больше буфера, то увеличивать буфер, если меньше, то оставлять буфер как есть.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Wed, 07 Oct 2020 19:57:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142529#p142529</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ActiveX из AutoHotkey]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142528#p142528</link>
			<description><![CDATA[<p>Это было бы так, если бы мы изменяли её содержимое, присваивая другое значение через <em>var := &quot;newValue&quot;</em>. В таком случае, если новое значение требует большей вместимости, указатель на переменную может измениться.<br /></p><div class="codebox"><pre><code>var := &quot;a&quot; 
ptr1 := &amp;var
var := &quot;abcd&quot;
ptr2 := &amp;var
MsgBox, % ptr1 &quot;`n&quot; ptr2</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 07 Oct 2020 19:31:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142528#p142528</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ActiveX из AutoHotkey]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142527#p142527</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Note: the variable will auto-expand if the script assigns it a larger value later.</p></blockquote></div><p>Так она разве не автоматически увеличивается под содержимое? На практике вроде всегда всё влезает.<br /></p><div class="quotebox"><blockquote><p>Since this function is often called simply to ensure the variable has a certain minimum capacity</p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Wed, 07 Oct 2020 19:22:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142527#p142527</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ActiveX из AutoHotkey]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142526#p142526</link>
			<description><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>А почему размер 256 а не 1?</p></blockquote></div><p>А почему должен быть 1? Размер должен быть как минимум равен содержимому. Если меньше, то нет гарантии, что данные сохранятся, или не испортят чего-нибудь другого при записи.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 07 Oct 2020 19:11:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142526#p142526</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ActiveX из AutoHotkey]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142525#p142525</link>
			<description><![CDATA[<div class="quotebox"><cite>Malcev пишет:</cite><blockquote><p>Посмотрел справку - твой код у меня так работает.</p></blockquote></div><p>ahkReady тут видимо не причём. Так отлично работает. Значит дело было только в &quot;неправильном&quot; вызове DllCall.<br /></p><div class="codebox"><pre><code>
script = 
( %
	VarSetCapacity(buff, 1, 0)
	Loop 
	{
	    r := DllCall(addr, &quot;int&quot;, A_Index, &quot;int&quot;, 22, &quot;Ptr&quot;, &amp;buff)
		MsgBox, % NumGet(buff, &quot;Float&quot;) &quot;``n&quot; StrGet(&amp;buff + 8) 
	}
)   
AhkCom := ComObjCreate(&quot;AutoHotkey.Script&quot;) 
AhkCom.ahkassign(&quot;addr&quot;, RegisterCallback(&quot;MyFunc&quot;)) 
AhkCom.ahktextdll(script) 
Return
	
MyFunc(p1, p2, pBuff) {
    NumPut(p1 / p2, pBuff + 0, &quot;Float&quot;)
    StrPut(&quot;Hello, World!&quot;, pBuff + 8)
    Return true
}

</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Wed, 07 Oct 2020 19:06:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142525#p142525</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: ActiveX из AutoHotkey]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142523#p142523</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>VarSetCapacity(buff, 256, 0)</p></blockquote></div><p>А почему размер 256 а не 1?</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Wed, 07 Oct 2020 18:00:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142523#p142523</guid>
		</item>
	</channel>
</rss>
