<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Передача массива как типа данных VARIANT]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=12410</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=12410&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Передача массива как типа данных VARIANT».]]></description>
		<lastBuildDate>Thu, 09 Feb 2017 03:15:33 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Передача массива как типа данных VARIANT]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=112023#p112023</link>
			<description><![CDATA[<p>Скорее, чтобы компиляторы могли отлавливать ошибки программистов.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Thu, 09 Feb 2017 03:15:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=112023#p112023</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача массива как типа данных VARIANT]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=112016#p112016</link>
			<description><![CDATA[<p>Спасибо, после АНК конечно все эти типы кажутся чем то лишним. Это вообще нужно только для повышения производительности?</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Wed, 08 Feb 2017 22:30:15 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=112016#p112016</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача массива как типа данных VARIANT]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111990#p111990</link>
			<description><![CDATA[<p>Сами массивы передаются оба в Вариантах, но у gpCode члены имеют тип Integer, а у dataValue они тоже Варианты. Возможно, в этом массиве нужна возможность передавать разные типы, поэтому члены массива и обернули в Варианты. Т.е. формально все элементы массива имеют один тип, Вариант, один размер, как и положено. Но внутри Вариантов уже могут быть данные разных типов и размеров. Для этого, наверно, тип Вариант и был когда-то выдуман.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Wed, 08 Feb 2017 12:14:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111990#p111990</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача массива как типа данных VARIANT]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111987#p111987</link>
			<description><![CDATA[<p><strong>YMP</strong><br />Спасибо огромное, работает!</p><p>Следующий параметр FilterData почему то надо передавать как VT_VARIANT := 12, не подскажете почему так, ведь в справке тип такой же указан. VBA это непонятно.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Wed, 08 Feb 2017 11:07:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111987#p111987</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача массива как типа данных VARIANT]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111983#p111983</link>
			<description><![CDATA[<p>Массив будет завёрнут в Вариант при передаче методу, АНК сам это сделает. А члены массива заворачивать не надо, судя по этому:<br /></p><div class="codebox"><pre><code>
Dim gpCode(0) As Integer
Dim dataValue(0) As Variant
</code></pre></div><p>Если члены тоже Варианты, то это объявляется явным образом. Значит, они просто целые числа. Но Integer в VBA, как я нагулил, это 16-битные числа, а не 32-битные. Так что, наверно, надо так:<br /></p><div class="codebox"><pre><code>
arr := ComObjArray(VT_I2 := 2, 1)
arr[0] := 62
ComObj.Method(arr)
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Wed, 08 Feb 2017 03:28:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111983#p111983</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача массива как типа данных VARIANT]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111980#p111980</link>
			<description><![CDATA[<p>Ругается всё равно.<br /></p><div class="quotebox"><blockquote><p>Error:&nbsp; 0x80070057 - Параметр задан неверно.<br />Source:		AutoCAD<br />Description:	Недопустимый аргумент FilterType в Select</p></blockquote></div><p><a href="http://help.autodesk.com/cloudhelp/2015/ENU/AutoCAD-ActiveX/files/GUID-4CDE43DD-E3EF-4EF8-B377-4B9ED03E4C96.htm?guid=GUID-4CDE43DD-E3EF-4EF8-B377-4B9ED03E4C96">Не пойму из справки</a> (параметр FilterType) что ему надо.</p><p>VBA программист пишет:<br /></p><div class="quotebox"><blockquote><p>В таком виде 62 и 3 задавать нельзя. Это же <strong>массивы &quot;завернутые&quot; в Variant</strong>, а не просто целые числа.</p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Tue, 07 Feb 2017 17:27:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111980#p111980</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача массива как типа данных VARIANT]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111974#p111974</link>
			<description><![CDATA[<p>Вот так передаётся массив 32-битных целых:<br /></p><div class="codebox"><pre><code>
arr := ComObjArray(VT_I4 := 3, 1)
arr[0] := 62
ComObj.Method(arr)
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Tue, 07 Feb 2017 12:32:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111974#p111974</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача массива как типа данных VARIANT]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111973#p111973</link>
			<description><![CDATA[<p>Проверил на своём объекте код из первого поста — методу передаётся тип VT_ARRAY | VT_VARIANT. Т.е. массив вариантов. Может, вашему объекту надо массив целых чисел? Т.е. VT_ARRAY | VT_I4, например. Сам массив, конечно, в варианте передаётся, но его члены, возможно, в варианты упаковывать не надо.</p><p>Код из второго поста передаёт тип VT_DISPATCH, т.е. объект.</p><p>Код от <strong>Malcev</strong>&#039;a — ссылку на пустой вариант.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Tue, 07 Feb 2017 12:29:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111973#p111973</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача массива как типа данных VARIANT]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111968#p111968</link>
			<description><![CDATA[<p>Так тоже пробовал, но это вроде аналог byref.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Tue, 07 Feb 2017 11:04:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111968#p111968</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача массива как типа данных VARIANT]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111966#p111966</link>
			<description><![CDATA[<p>Опечатка:<br /></p><div class="codebox"><pre><code>ComObj.Method(arr.ref)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Tue, 07 Feb 2017 10:19:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111966#p111966</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача массива как типа данных VARIANT]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111959#p111959</link>
			<description><![CDATA[<p>В справке <a href="https://autohotkey.com/docs/commands/ComObjActive.htm#Examples">такой пример нашёл</a>, тоже не получается.</p><div class="codebox"><pre><code>
arr := ComVar()
arr[0] := 62 
ComObj.Method(arr)



; ComVar: Creates an object which can be used to pass a value ByRef.
;   ComVar[] retrieves the value.
;   ComVar[] := Val sets the value.
;   ComVar.ref retrieves a ByRef object for passing to a COM function.
ComVar(Type=0xC)
{
    static base := { __Get: &quot;ComVarGet&quot;, __Set: &quot;ComVarSet&quot;, __Delete: &quot;ComVarDel&quot; }
    ; Create an array of 1 VARIANT.  This method allows built-in code to take
    ; care of all conversions between VARIANT and AutoHotkey internal types.
    arr := ComObjArray(Type, 1)
    ; Lock the array and retrieve a pointer to the VARIANT.
    DllCall(&quot;oleaut32\SafeArrayAccessData&quot;, &quot;ptr&quot;, ComObjValue(arr), &quot;ptr*&quot;, arr_data)
    ; Store the array and an object which can be used to pass the VARIANT ByRef.
    return { ref: ComObject(0x4000|Type, arr_data), _: arr, base: base }
}

ComVarGet(cv, p*) { ; Called when script accesses an unknown field.
    if p.MaxIndex() = &quot;&quot; ; No name/parameters, i.e. cv[]
        return cv._[0]
}

ComVarSet(cv, v, p*) { ; Called when script sets an unknown field.
    if p.MaxIndex() = &quot;&quot; ; No name/parameters, i.e. cv[]:=v
        return cv._[0] := v
}

ComVarDel(cv) { ; Called when the object is being freed.
    ; This must be done to allow the internal array to be freed.
    DllCall(&quot;oleaut32\SafeArrayUnaccessData&quot;, &quot;ptr&quot;, ComObjValue(cv._))
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Tue, 07 Feb 2017 00:32:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111959#p111959</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Передача массива как типа данных VARIANT]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=111955#p111955</link>
			<description><![CDATA[<p>Пытаюсь методу сом объекта передать массив в типе данных VARIANT:</p><div class="codebox"><pre><code>arr := ComObjArray(VT_VARIANT := 12, 1)
arr[0] := 62
ComObj.Method(arr)
</code></pre></div><p> Который ему требуется, судя по коду VBA.<br /></p><div class="codebox"><pre><code>Dim gpCode(0) As Integer 
gpCode(0) = 62
Dim groupCode As Variant
groupCode = gpCode
&#039; указываю groupCode как передаваемый параметр</code></pre></div><p>Может вообще не туда копаю?</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Tue, 07 Feb 2017 00:08:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=111955#p111955</guid>
		</item>
	</channel>
</rss>
