2010-09-20 5 views

ответ

0

Pascal Scripting, используемый в Inno Setup, кажется, не поддерживает указатели. Возможно, вы можете просто передать cardinal (если 32-разрядный), или вы можете написать свой код во внешней DLL и вызвать это из программы установки Inno Setup.

+0

спасибо, я попробую. – Phantom

2

Немного опоздал. xD Чтобы решить эту проблему, вы должны объявить параметр функции как переменную, используя ключевое слово «var». Это стандартный метод указателей объявлений для переменных в параметрах функции для Pascal.

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

+0

Извините, я мог казаться бестактным, но я, вероятно, ответил на предыдущие комментарии. (Мой ответ исправлен и расширен) –