DllStructGetData
Возвращает данные элемента структуры.
DllStructGetData ( Struct, Element [, index = Default ] )
Параметры
Struct | Структура возвращаемая функцией DllStructCreate(). |
Element |
Элемент структуры, к которому вы хотите получить доступ, отсчёт с 1 или имя элемента указанное в функции DllStructCreate(). |
index |
[необязательный] Для элементов, которые являются массивом этот параметр указывает индекс возвращаемого элемента массива, отсчёт с 1. Если параметр опущен или указано ключевое слово Default, тогда возвращается массив целиком (полезно для быстрого извлечения строк). Не используется для элементов не являющихся массивом. |
Возвращаемое значение
Успех: | Возвращает данные элемента структуры. |
Ошибка: | Возвращает 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)