Мало было поздно. XD
Чтобы решить эту проблему, вы должны объявить параметр функции как переменную, используя ключевое слово «var». Это стандартный метод объявления указателей на переменные в параметрах функции для Pascal.
Ха, я доведу мысль до логического конца. Во-первых, выполняющийся процесс InnoSetup во всех случаях 32 бита, то есть вам никто не мешает объявить новый тип («PVOID» или «Pointer») соответствующего измерения (тип PVOID = Cardinal; Pointer = Integer; и т. Д.) и тем более это только для удобства восприятия. Во-вторых, замена индекса на переменную (с помощью ключевого слова «var»), при объявлении внешних функций API, происходит более чем достаточно. В третьих, из-за специфической организации памяти у Pascal-скрипта, некоторые функции API не смогут обращаться к таким переменным, тогда вам никто не помешает объявить внешние функции функции работы с памятью (GetMemory, FreeMemory, FillMemory + GetMemory = AllocMemory) из Kernel32.dll. GetMemory просто возвращает индекс на сайте памяти. В-четвертых, для извлечения данных из блока с индексами вам никто не мешает использовать функции копирования вроде CopyMemory, StringCchCopyA, lstrcpynA из того же Kernel32.dll, где его выходным параметром будет переменная (var) нужного измерения, а вход, указатель на блок со смещением до необходимого значения.