Что нового

[Массивы] 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
Репутация
622
Попробуй так. Первое что пришло в голову, велика вероятность, что тут ошибка, в следствие отсутствия опыта с функциями типа 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
 
Автор
K

killbond

Осваивающий
Сообщения
96
Репутация
32
Спасибо! Помог!
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 705
Не стоит использовать структуры для того, для чего они не преднозначены. Как по вашему, почему они называются 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 705
Код:
#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:
 
Верх