Описание функции | |
DllStructCreate |
Создаёт структуру в стиле C/C++ для использования в DllCall.
DllStructCreate(Struct[,Pointer])
Параметры
Struct | Строка, представляющая создаваемую структуру (см. примечания). |
Pointer |
[необязательный] Если структуре не выделена память, но используется указатель. |
Возвращаемое значение
Успех: | Возвращает переменную для использования вызова команд DllStruct. |
Ошибка: | Возвращает 0. |
@error: | 0 = нет ошибок. |
1 = Передаваемая в DllStructCreate переменная не является строкой. | |
2 = В переданной строке присутствует неизвестный тип данных. | |
3 = Не удалось выделить память, необходимую для структуры или указатель (Pointer) = 0. | |
4 = Ошибка выделения памяти для переданной строки. |
Тип | Подробно |
BYTE |
8 бит (1 байт) беззнаковый символ |
BOOLEAN |
8 бит (1 байт) беззнаковый символ |
CHAR |
8 бит (1 байт) ASCII символ |
WCHAR |
16 бит (2 байта) UNICODE широкий символ |
short |
16 бит (2 байта) знаковое целое |
USHORT |
16 бит (2 байта) беззнаковое целое |
WORD |
16 бит (2 байта) беззнаковое целое |
int |
32 бит (4 байта) знаковое целое |
long |
32 бит (4 байта) знаковое целое |
BOOL |
32 бит (4 байта) знаковое целое |
UINT |
32 бит (4 байта) беззнаковое целое |
ULONG |
32 бит (4 байта) беззнаковое целое |
DWORD |
32 бит (4 байт) беззнаковое целое |
INT64 |
64 бит (8 байт) знаковое целое |
UINT64 |
64 бит (8 байт) беззнаковое целое |
ptr |
32 или 64 бит беззнаковое целое (в зависимости от используемой версии AutoIt, x86 или x64) |
HWND |
32 бит (4 байта) целое |
HANDLE |
32 бит (4 байта) целое |
float |
32 бит (4 байта) с плавающей точкой |
double |
64 бит (8 байт) с плавающей точкой |
INT_PTR, LONG_PTR, LRESULT, LPARAM |
32 или 64 бит знаковое целое (в зависимости от используемой версии AutoIt, x86 или x64) |
UINT_PTR, ULONG_PTR, DWORD_PTR, WPARAM |
32 или 64 бит беззнаковое целое (в зависимости от используемой версии AutoIt, x86 или x64) |
STRUCT |
The following datatypes will be align according to C declaration rules. См. ниже. |
ENDSTRUCT |
end of the collection datatypes. Padding can occurs see below. |
ALIGN |
n bytes boundary where datatype must be aligned. |
Примечания
Каждый тип данных должен быть разделен точкой с запятой ';'.
DllStructCreate('short;int') ; структура 8 байт, 'int' со смещением 4
DllStructCreate('align 2;short;int') ; структура 6 байт, 'int' со смещением 2
DllStructCreate('byte;double') ; структура 16 байт, 'double' со смещением 8
DllStructCreate('align 4;byte;double') ; структура 12 байт, 'double' со смещением 4
exect=Assign('STRUCT_N',DllStructCreate('wchar[256]'),2)
exect=Assign('STRUCT_RECT',DllStructCreate(':tagRECT:'),2)
[TagStruct]
tagRECT=struct;long Left;long Top;long Right;long Bottom;endstruct
tagOSVERSIONINFO=struct;dword OSVersionInfoSize;dword MajorVersion;dword MinorVersion;dword BuildNumber;dword PlatformId;wchar CSDVersion[128];endstruct
См. также
DllCall, DllStructGetData, DllStructSetData, DllStructGetPtr, DllStructGetSize, IsDllStruct
Примеры: | Как создать кнопку? |
exect=$var_0=Assign('STRUCT_1',DllStructCreate('dword~~Size;hwnd~~hWndOwnder;handle~~hInstance;dword~~rgbResult;ptr~~CustColors;dword~~Flags;lparam~~lCustData;ptr~~lpfnHook;ptr~~lpTemplateName'),2)+Assign('STRUCT_2',DllStructCreate('dword[16]'),2)+DllStructSetData($STRUCT_1,'Size',DllStructGetSize($STRUCT_1))+DllStructSetData($STRUCT_1,'hWndOwnder',GUICreate(0,200,300,-1,-1))+DllStructSetData($STRUCT_1,'rgbResult','0xC5B248')+DllStructSetData($STRUCT_1,'CustColors',DllStructGetPtr($STRUCT_2))+DllStructSetData($STRUCT_1,'Flags',259)||$var_iyn=DllCall('comdlg32.dll','bool','ChooseColor','struct*',$STRUCT_1)[0]||$var_0=$var_iyn=0?_Exit():1||$var_num=DllStructGetData($STRUCT_1,'rgbResult')||$var_ibrg=Hex($var_num,6)||_ViewValues('$var_ibrg','BRG~~Color') ;; создание и запуск окна выбора цвета
exect=Assign('STRUCT_N',DllStructCreate('wchar[256]'),2)||$var_i=IsDllStruct($STRUCT_N)||_ViewValues($var_i) ;; пример проверки переменной типом данных DllStruct
exect=$var_0=Assign('STRUCT_N',DllStructCreate('struct;int~~var1;byte~~var2;uint~~var3;char~~var4[128];endstruct'),2)+DllStructSetData($STRUCT_N,1,-1)+DllStructSetData($STRUCT_N,'var2',255)+DllStructSetData($STRUCT_N,4,'Write-Data')||$var_s='Размер~~структуры:~~'&DllStructGetSize($STRUCT_N)&@CRLF&'Указатель~~структуры:~~'&DllStructGetPtr($STRUCT_N)&@CRLF&'Данные:'&@CRLF&DllStructGetData($STRUCT_N,1)&@CRLF&DllStructGetData($STRUCT_N,2)&@CRLF&DllStructGetData($STRUCT_N,3)&@CRLF&DllStructGetData($STRUCT_N,4)||_ViewValues('$var_s') ;; пример создания структуры, установки и получение данных
exect=$var_handle=WinGetHandle('[CLASS:TTOTAL_CMD]')||$var_0=Assign('STRUCT_RECT',DllStructCreate(':tagRECT:'),2)+DllCall('user32.dll','bool','GetWindowRect','hwnd',Eval('var_handle'),'struct*',$STRUCT_RECT)||$var_s='Координаты~~углов~~TC:'&@CRLF&'X1:~~'&DllStructGetData($STRUCT_RECT,'Left')&@CRLF&'X2:~~'&DllStructGetData($STRUCT_RECT,'Right')&@CRLF&'Y1:~~'&DllStructGetData($STRUCT_RECT,'Top')&@CRLF&'Y2:~~'&DllStructGetData($STRUCT_RECT,'Bottom')||_ViewValues('$var_s') ;; получение координат окна Total Commander
exect=$var_0=Assign('STRUCT_ICON',DllStructCreate('int'),2)+Assign('STRUCT_STRING',DllStructCreate('wchar[260]'),2)+DllStructSetData($STRUCT_STRING,1,@SystemDir&'\shell32.dll')||$var_iyn=DllCall('shell32.dll','int',62,'hwnd',GUICreate(0,400,400,-1,-1),'struct*',$STRUCT_STRING,'int',DllStructGetSize($STRUCT_STRING)/2,'struct*',$STRUCT_ICON)[0]||$var_0=$var_iyn=0?_Exit():1||$var_s=DllStructGetData($STRUCT_STRING,1)&','&DllStructGetData($STRUCT_ICON,1)||_ViewValues('$var_s','Путь~~и~~номер~~значка') ;; выбор значка в системном диалоге
exect=$var_0=Assign('STRUCT_1',DllStructCreate('wchar[256]'),2)+DllCall('Kernel32.dll','uint','GetTempFileNameW','wstr',@TempDir,'wstr','__','uint',0,'ptr',DllStructGetPtr($STRUCT_1))||$var_path=DllStructGetData($STRUCT_1,1)||_ViewValues('$var_path','temp_file') ;; получить временный файл