Главная

Назад к списку функции

 

 

DllStructGetPtr

Возвращает указатель структуры или элемент в структуре.

DllStructGetPtr ( Struct [, Element ] )

Параметры

Struct Структура возвращаемая функцией DllStructCreate().
Element [необязательный] Элемент структуры, указатель которой вам необходим, отсчёт от 1 или имя элемента указанного в DllStructCreate().

Возвращаемое значение

Успех: Возвращает указатель структуры.
Ошибка: Возвращает 0.
@error: 0 = Нет ошибки.
  1 = Структура не является корректной структурой возвращённой функцией DllStructCreate().
  2 = Элемент за пределами границ структуры.

Примечания

Используется в DllCall().

См. также

DllCallDllStructCreate

Пример

 

#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

Источник: http://dayzev.ucoz.ru/
Категория: Описание функций AutoIt Добавил: Grek (05.01.2015) | | Теги: DllStructGetPtr
Всего комментариев: 0