Что нового

[Массивы] DllStructCreate - массив структур

killbond

Осваивающий
Сообщения
96
Репутация
32
Можно ли в AutoIt создать массив структур? Приведите пример плииз? А если нет, то как можно добиться подобного результата? Я пытался сделать подобное, но компилятор у меня находит ошибку в коде, подскажите, пожалуйста, что не так?

Код:
Dim $value = 100 
Dim $ListItems[$value] = DllStructCreate("uint Procedure;byte Site;uint Efficiency")
For $Counter = 1 To $value
	DllStructSetData ($ListItems[$Counter],"Site","Элемент")
Next
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
624
Попробуй так. Первое что пришло в голову, велика вероятность, что тут ошибка, в следствие отсутствия опыта с функциями типа DllStruct...
Код:
Dim $value = 100
Dim $ListItems[$value]
For $i = 0 to $value - 1
	$ListItems[$i] = DllStructCreate("uint Procedure;byte Site;uint Efficiency")
Next
For $Counter = 0 To $value - 1
    DllStructSetData ($ListItems[$Counter],"Site","Элемент")
Next
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,717
Не стоит использовать структуры для того, для чего они не преднозначены. Как по вашему, почему они называются DllStrict... Они предназначены именно для DllCall() и не для чего больше. Не стоит их использовать в качестве переменных. Более того, создавать структуры лучше непосредственно перед вызовом DllCall(). Да, это работает, но никто не гарантирует поддержку в будущем.

И зачем в этом примере вообще нужны структуры, сделайте массив из массивов.
 
Автор
K

killbond

Осваивающий
Сообщения
96
Репутация
32
Если это будет массив массивов, то как, спрашивается, мне оперировать с ним?

Код:
#include <GUIConstants.au3>
#include <Array.au3>

Dim $SiteName = "www.google.ru"
Dim $Array[100]
Dim $SecondArray[2]
$SecondArray[0] = $SiteName
For $i = 0 to 99
	$Array[$i] = $SecondArray
Next
_ArrayDisplay ( $Array, "Содержание массива:" )


Не совсем понимаю, как извлечь данные из второго массива? И как их присвоить, если данные в каждом массиве должны быть разными? Буду благодарен за примерчик ;)
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,717
Код:
#Include <Array.au3>

Dim $B1[2] = ['Первый массив данных', 1]
Dim $B2[5] = ['Второй массив данных', 2, 6, 'Доп. данные', Ptr(0)]

Dim $A[2] = [$B1, $B2]

Global $Array

For $i = 0 To UBound($A) - 1
	$Array = $A[$i]
	_ArrayDisplay($Array)
Next


Но это экзотика, в данном случае нужно просто создать 2D массив, и будет тебе счастье.

Код:
#Include <Array.au3>

Dim $Array[2][3]

$Array[0][0] = 'Первый массив'
$Array[0][1] = 1
$Array[0][2] = StringToBinary($Array[0][0])

$Array[1][0] = 'Второй массив'
$Array[1][1] = 2
$Array[1][2] = StringToBinary($Array[1][0])

_ArrayDisplay($Array)
 
Автор
K

killbond

Осваивающий
Сообщения
96
Репутация
32
Понял, спасибо, особенно понравился вариант с экзотикой :smile:
 
Верх