Size: a a a

2021 June 06

ox

osm x in AutoIT RU
источник

ox

osm x in AutoIT RU
источник

ox

osm x in AutoIT RU
Доделал транспайлер с подобных структур
источник

ox

osm x in AutoIT RU
По сравнению с предыдущей версией, теперь можно делать вложенные структуры, массивы, также есть enum
источник

ox

osm x in AutoIT RU
Скрипт для трансляции с подобных скриптов в autoit формат

К примеру
//////////////////////////////
enum Type {
 Ver0,
 Ver1,
 Ver2
}
struct test_t {
 Type type;
 int32_t i32;
};

struct parent_t {
 test_t test;
 test_t testArr[10];
 int32_t iarr[10][10];
};
//////////////////////////////
В autoit можно работать с этими структурами так

//////////////////////////////
local $obj = parent_t()
$obj.test.type = $Ver0
local $tmp0 = $obj.testArr
local $tmp1 = $tmp0[0]
$tmp1.i32 = 50
$tmp0[0] = $tmp1
$obj.testArr = $tmp0

; дальше можно отправить ее параметром винапи функции например
local $struct = ObjToStruct($obj)

; из структуры в объект
local $obj2 = ObjFromStruct(parent_t, $struct)

; или так
local $obj3 = ObjReadMemory(parent_t, DllStructGetPtr($struct) )

MsgBox("", "$obj2.testArr[0].i32", $obj2.testArr[0].i32)
MsgBox("", "$obj3.testArr[0].i32", $obj3.testArr[0].i32)
//////////////////////////////


Для работы скрипта нужна Nodejs, лучше последней версии
Запускать так:
node parseStructures.js -src "./struct.h" -dst "struct.au3"

Скрипт запустится, и будет следить за всеми файлами-зависимостями, автоматически перекомпилируя
при любых изменениях


//////////////////////////////
// также можно включать и другие файлы
#include "struct2.h"
источник

ox

osm x in AutoIT RU
также совместимо с архитектурно зависимыми типами( uint_ptr, int_ptr ), в x32/x64 аитах структура включающая такой тип будет иметь разный размер/выравнивание
источник

ДК

Дмитрий Кожанов... in AutoIT RU
Проверю. В штакесе было правило
источник

ED

Elena D in AutoIT RU
Наконец у нас есть администратор
источник

IL

IL'YA Loading… ████[... in AutoIT RU
😂а я думал тут каждый администратор😂
источник

Ra

Ruslan aka DUDE in AutoIT RU
👍💪👏🤘
источник

ox

osm x in AutoIT RU
также есть модификаторы, у enum это Size
enum MyEnum @size=1 { X,Y,Z}

у струтур это align
struct MyStruct @align=1 { byte u8; int x,y,z; }
источник

ox

osm x in AutoIT RU
и я алиасы еще ввел
typedef int32_t int;
typedef uint32_t dword;

что бы в структурах не заменять типы
источник

ox

osm x in AutoIT RU
      uint8_t : 'byte'  ,
     uint16_t: 'word'  ,
     uint32_t: 'dword' ,
     uint64_t: 'uint64',
     
     int8_t  : 'byte' ,
     int16_t : 'short',
     int32_t : 'int'  ,
     int64_t : 'int64',
     
     float   : 'float',
     double  : 'double',
     
     char    : 'byte'  ,
     
     int_ptr : 'int_ptr',
     uint_ptr: 'uint_ptr',
вот базовые типы доступные для структур(справа аналог в аите)
источник

ox

osm x in AutoIT RU
char - у меня особый тип, поле структуры с ним будет конвертироваться в строку и наобарот из строки в стурктуру первый символ будет в char
источник

ox

osm x in AutoIT RU
char str[40]; - в структуре, будет с строкой(с 0 в конце)
источник

ox

osm x in AutoIT RU
Func __StructReadString($struct, $prop, $length)
 local $str = ""
 local $array = __StructReadArray($struct, $prop, $length)
 local $i = 0
 for $i = 0 to $length - 1
   local $char = $array[ $i ]
   if ( $char == 0 ) then
     exitloop
   endif
   
   $str = $str & Chr($char)
 next
 return $str
EndFunc
источник

ox

osm x in AutoIT RU
еще надо int8_t доделать, в аите нет такого типа, надо програмно конвертировать
источник

Ra

Ruslan aka DUDE in AutoIT RU
PS:
таблица есть тут
https://www.autoitscript.com/autoit3/docs/functions/DllStructCreate.htm
и тут
https://www.autoitscript.com/autoit3/docs/functions/DllCallAddress.htm
они моментами дополняют друг друга
источник

Ra

Ruslan aka DUDE in AutoIT RU
int8_t в BYTE не?
источник

Ra

Ruslan aka DUDE in AutoIT RU
а тут чел говорит char
источник