Что нового

[Массивы] Создать структуру с массивом ( DllStructCreate )

zerobot

Новичок
Сообщения
78
Репутация
0
Добрый день!

Пытаюсь прочитать из памяти массив. Однако получаю ошибку (Error: Variable must be of type "Object".) , что переменная не является объектом..
Как решить проблему?

Код:
Код:
;other code
;...

$fl = DllStructCreate('float mfl[4][4];')
Global $_p = DllStructGetPtr($fl)
Global $_i = DllStructGetSize($fl)

_NtReadMassive(0xАдрес, $_p, $_i)
MsgBox(64,"","Первый элемент массива: "&$fl.mfl[0][1])

;...
;other code

Func _NtReadMassive($i_BaseAddress, $p_Buffer, $i_Size)
    Local $a_Res = DllCall("nt.dll", 'int', 'NtReadVirtualMemory', 'handle', $process, 'ptr', $i_BaseAddress, 'ptr', $p_Buffer, 'ulong', $i_Size, 'int*', 0)
    If @Error Or $a_Res[0] Then _
        Return False
    Return True
EndFunc
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
zerobot
Так нельзя, а вот так можно:
Код:
$fl = DllStructCreate('float mfl[16];')



И получать значение вот так:
Код:
$fl.mfl[0][1]

Тоже нельзя, можно следующим образом:

Код:
DllStructGetData($fl, 'mfl', (0 * 4) + 1)
 
Автор
Z

zerobot

Новичок
Сообщения
78
Репутация
0
firex сказал(а):
zerobot
Так нельзя, а вот так можно:
Код:
$fl = DllStructCreate('float mfl[16];')



И получать значение вот так:
Код:
$fl.mfl[0][1]

Тоже нельзя.
Хорошо. Большое спасибо за ответ :smile:
Я просто переписываю код с C++...
Там используется массив вида [4][4]
Если я заменю его на [16] то как разбираться где находится например элемент [2][3]?
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
DllStructGetData($fl, 'mfl', (2 * 4) + 3 + 1)


*Поправил, в AutoIt отсчет идет от 1.
 
Верх