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
См. также
DllCall, DllStructGetData, DllStructSetData, DllStructGetPtr, DllStructGetSize, IsDllStructПример
#cs
Создаёт структуру (вид на языке Си)
struct {
int var1;
unsigned char var2;
unsigned int var3;
char var4[128];
}
Schema:
------------------------------------
\ int \ byte \ uint \ char \
\ var1 \ var2 \ var3 \ var4 \
------------------------------------
#ce
; Local Const $tagSTRUCT = "int;ubyte;uint;char[128]" ; 3.3.6.1
; Local Const $tagSTRUCT = "struct;int;byte;uint;char[128];endstruct" ; 3.3.8.1, без имён элементов (полей) структуры
Local Const $tagSTRUCT = "struct;int var1;byte var2;uint var3;char var4[128];endstruct" ; 3.3.8.1, с именами элементов (полей) структуры
$tStruct = DllStructCreate($tagSTRUCT)
If @error Then
MsgBox(4096, "", "Ошибка создания структуры, @error = " & @error)
Exit
EndIf
#cs
Устанавливает данные в структуру (вид на языке Си)
struct.var1 = -1;
struct.var2 = 255;
struct.var3 = INT_MAX; -1 will be typecasted to (unsigned int)
strcpy(struct.var4,"Приветствие");
struct.var4[0] = 'п';
#ce
DllStructSetData($tStruct, 1, -1) ; или var1 вместо 1
DllStructSetData($tStruct, 2, 255) ; или var2 вместо 2
DllStructSetData($tStruct, 3, -1) ; или var3 вместо 3
DllStructSetData($tStruct, 4, "Приветствие") ; или var4 вместо 4
DllStructSetData($tStruct, 4, Asc("п"), 1)
; Отображает информацию в структуре
MsgBox(4096, "Сообщение", "Размер структуры: " & DllStructGetSize($tStruct) & @CRLF & _
"Указатель структуры: " & DllStructGetPtr($tStruct) & @CRLF & _
"Данные:" & @CRLF & _
DllStructGetData($tStruct, 1) & @CRLF & _
DllStructGetData($tStruct, 2) & @CRLF & _
DllStructGetData($tStruct, 3) & @CRLF & _
DllStructGetData($tStruct, 4))
$tStruct = 0 ; Освобождает выделенную для структуры память, если потребуется.
; При завершении скрипта или функции (если локальная структура) освобождать не требуется.