Автор Тема: [Массивы] Создать структуру с массивом ( DllStructCreate )  (Прочитано 1576 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн zerobot [?]

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

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

Код:
Код: AutoIt [Выделить]
;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


Русское сообщество AutoIt


Оффлайн firex [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 943
  • Репутация: 203
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
zerobot
Так нельзя, а вот так можно:
Код: AutoIt [Выделить]
$fl = DllStructCreate('float mfl[16];')



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

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

Код: AutoIt [Выделить]
DllStructGetData($fl, 'mfl', (0 * 4) + 1)


Оффлайн zerobot [?]

  • Новичок
  • *
  • Сообщений: 78

  • Автор темы
  • Репутация: 0
    • Награды
zerobot
Так нельзя, а вот так можно:
Код: AutoIt [Выделить]
$fl = DllStructCreate('float mfl[16];')



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

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

Русское сообщество AutoIt

Re: [Массивы] Создать структуру с массивом ( DllStructCreate )
« Ответ #2 Отправлен: Май 14, 2015, 12:33:21 »

Оффлайн firex [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 943
  • Репутация: 203
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Код: AutoIt [Выделить]
DllStructGetData($fl, 'mfl', (2 * 4) + 3 + 1)


*Поправил, в AutoIt отсчет идет от 1.
« Последнее редактирование: Май 14, 2015, 12:39:08 от firex »

Русское сообщество AutoIt

Re: [Массивы] Создать структуру с массивом ( DllStructCreate )
« Ответ #3 Отправлен: Май 14, 2015, 12:33:50 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
6 Ответов
5379 Просмотров
Последний ответ Ноябрь 06, 2009, 16:39:43
от killbond
5 Ответов
4128 Просмотров
Последний ответ Август 02, 2011, 09:45:56
от Redline
2 Ответов
2895 Просмотров
Последний ответ Сентябрь 22, 2011, 13:31:50
от Seoqsss
1 Ответов
3916 Просмотров
Последний ответ Октябрь 19, 2011, 01:06:23
от Yashied
3 Ответов
3931 Просмотров
Последний ответ Ноябрь 04, 2011, 23:05:09
от Garrett
2 Ответов
2482 Просмотров
Последний ответ Февраль 25, 2012, 21:32:39
от Afonichev
12 Ответов
4318 Просмотров
Последний ответ Апрель 08, 2014, 19:39:18
от Z_Lenar
4 Ответов
2125 Просмотров
Последний ответ Июль 04, 2014, 23:07:51
от vsavelyev
0 Ответов
1135 Просмотров
Последний ответ Июль 04, 2014, 19:47:41
от madmasles
1 Ответов
410 Просмотров
Последний ответ Декабрь 28, 2017, 17:18:47
от Alofa