Функция DllStructGetData

 ↑  ←  Описание функции


DllStructGetData

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

DllStructGetData ( Struct, Element [, index = Default ] )

Параметры

Struct Структура возвращаемая функцией DllStructCreate().
Element Элемент структуры, к которому вы хотите получить доступ, отсчёт с 1 или имя элемента указанное в функции DllStructCreate().
index [необязательный] Для элементов, которые являются массивом этот параметр указывает индекс возвращаемого элемента массива, отсчёт с 1. Если параметр опущен или указано ключевое слово Default, тогда возвращается массив целиком (полезно для быстрого извлечения строк). Не используется для элементов не являющихся массивом.
*char[n], byte[n] и ubyte[n] возвращают все элементы данных, когда индекс опущен.

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

Успех:Возвращает данные элемента структуры.
Ошибка:Возвращает 0.
@error:0 = Нет ошибок.
1 = Структура не является корректной структурой возвращённой функцией DllStructCreate().
2 = Значение элемента выходит за пределы диапазона.
3 = Индекс выходит за пределы структуры.
4 = Неизвестный тип данных элемента
5 = Индекс <= 0.

Примечания

Когда элемент char[n] и индекс опущен, то возвращается строка; когда элемент byte[n] или ubyte[n] и индекс опущен, то возвращаются данные бинарного типа; в других случаях всегда возвращается число.

См. также

DllStructCreate, DllStructSetData

Пример

; Создаёт DLL структуру для использование в функции DllCall.
$tagOSVERSIONINFO = DllStructCreate('dword dwOSVersionInfoSize;dword dwMajorVersion;dword dwMinorVersion;dword dwBuildNumber;dword dwPlatformId;char szCSDVersion[128]')

; Обновляет 'размер элемента' в структуре используя DllStructGetSize для извлечения общего размера структуры.
DllStructSetData($tagOSVERSIONINFO, 'dwOSVersionInfoSize', DllStructGetSize($tagOSVERSIONINFO))

; Вызывает API-функцию 'GetVersionEx' используя DllCall и передачу структуры.
; $aReturn = DllCall('kernel32.dll', 'int', 'GetVersionEx', 'struct*', $tagOSVERSIONINFO) ; новый вариант вызывает ошибку на 3.3.6.1
$aReturn = DllCall('kernel32.dll', 'int', 'GetVersionEx', 'ptr', DllStructGetPtr($tagOSVERSIONINFO))
If @error Or Not $aReturn[0] Then
    MsgBox(4096, "Ошибка DllCall", "Произошла ошибка при извлечении системной информации.")
EndIf

; Возвращает указанные данные из структуры.
$iMajorVersion = DllStructGetData($tagOSVERSIONINFO, 'dwMajorVersion')
$iMinorVersion = DllStructGetData($tagOSVERSIONINFO, 'dwMinorVersion')
$iBuildNumber = DllStructGetData($tagOSVERSIONINFO, 'dwBuildNumber')
$PlatformID = DllStructGetData($tagOSVERSIONINFO, "dwPlatformId")
$sServicePack = DllStructGetData($tagOSVERSIONINFO, 'szCSDVersion')

; Освобождает структуру
$tagOSVERSIONINFO = 0

MsgBox(4096, "Информация о системе", "Основной: " & $iMajorVersion & @CRLF & _
        "Второстепенный: " & $iMinorVersion & @CRLF & _
        "Сборка: " & $iBuildNumber & @CRLF & _
        "Платформа ID: " & $PlatformID & @CRLF & _
        "Версия: " & $sServicePack & @CRLF)