DllStructGetPtr
Возвращает указатель структуры или элемент в структуре.
DllStructGetPtr ( Struct [, Element ] )
Параметры
Struct | Структура возвращаемая функцией DllStructCreate(). |
Element |
[необязательный] Элемент структуры, указатель которой вам необходим, отсчёт от 1 или имя элемента указанного в DllStructCreate(). |
Возвращаемое значение
Успех: | Возвращает указатель структуры. |
Ошибка: | Возвращает 0. |
@error: | 0 = Нет ошибки. |
1 = Структура не является корректной структурой возвращённой функцией DllStructCreate(). | |
2 = Элемент за пределами границ структуры. |
Примечания
Используется в DllCall().См. также
DllCall, DllStructCreateПример
#include <StructureConstants.au3> ; $tagRECT
; Пример 1
; Возвращает дескриптор активного окна и использует WinGetPos для возвращения координат прямоугольника окна
$hWnd = WinGetHandle("") ; Тоже что "[active]" - получает дескриптор активного окна
$aWndPos = WinGetPos($hWnd) ; Получает координаты и размер окна
; Создаёт структуру
$tRECT = DllStructCreate($tagRECT)
If @error Then
MsgBox(4096, "", "Ошибка создания структуры, @error = " & @error)
Exit
EndIf
; Делает вызов функции GetWindowRect из user32.dll
; При вызове DllCall требуется использовать указатель на структуру возвращённый функцией DllStructGetPtr
DllCall("user32.dll", "int", "GetWindowRect", _
"hwnd", $hWnd, _
"ptr", DllStructGetPtr($tRECT))
If @error Then
MsgBox(4096, "", "Ошибка DllCall, @error = " & @error)
Exit
EndIf
;Получает возвращённые координаты прямоугольника окна
Local $iLeft = DllStructGetData($tRECT, "Left") ; или 1 вместо "Left".
Local $iTop = DllStructGetData($tRECT, 2) ; или "Top" вместо 2.
Local $iRight = DllStructGetData($tRECT, 3) ; или "Right" вместо 3.
Local $iBottom = DllStructGetData($tRECT, "Bottom") ; или 4 вместо "Bottom".
; Освобождает структуру
$tRECT = 0
; Отображает данные возвращённые функцией WinGetPos и возвращённые в структуру
MsgBox(4096, "Пример 1", "WinGetPos(): (" & $aWndPos[0] & ", " & $aWndPos[1] & ") " & _
"(" & $aWndPos[2] + $aWndPos[0] & ", " & $aWndPos[3] + $aWndPos[1] & ")" & @CRLF & _
"GetWindowRect(): (" & $iLeft & ", " & $iTop & ") (" & $iRight & ", " & $iBottom & ")")
;=========================================================
; Пример 2
; Создаёт структуру с данными int (целое положительное или отрицательное число)
$tStruct1 = DllStructCreate("int")
If @error Then
MsgBox(4096, "", "Ошибка создания структуры, @error = " & @error)
Exit
EndIf
; DllStructGetPtr ссылка на элемент. Кроме того, значение будет присвоено согласно новому определению типа uint
$tStruct2 = DllStructCreate("uint", DllStructGetPtr($tStruct1, 1))
If @error Then
MsgBox(4096, "", "Ошибка создания структуры, @error = " & @error)
Exit
EndIf
$tStruct3 = DllStructCreate("float", DllStructGetPtr($tStruct1, 1))
If @error Then
MsgBox(4096, "", "Ошибка создания структуры, @error = " & @error)
Exit
EndIf
; Устанавливает данные
DllStructSetData($tStruct1, 1, -1)
; Показывает различия типов данных тех же самых данных
MsgBox(4096, "DllStruct", _
"Указатели на структуру и их данные" & @CRLF & _
"$tStruct1: " & DllStructGetPtr($tStruct1, 1) & @TAB & "int: " & DllStructGetData($tStruct1, 1) & @CRLF & _
"$tStruct2: " & DllStructGetPtr($tStruct2, 1) & @TAB & "uint: " & DllStructGetData($tStruct2, 1) & @CRLF & _
"$tStruct3: " & DllStructGetPtr($tStruct3, 1) & @TAB & "float: " & DllStructGetData($tStruct3, 1))
; Указатели на структуру те же самые, так как указывают на ту же область в памяти.
; Освобождает выделенную память
$tStruct1 = 0
$tStruct2 = 0
$tStruct3 = 0