Что такое эквивалентность типов данных «указатель» (PVOID) в Inno Setup - PullRequest
2 голосов
/ 20 сентября 2010

Я пытаюсь использовать функцию RegSetKeySecurity() Windows API, но параметр pSecurityDescriptor является указателем.Что такое эквивалентность типов данных «указатель» (PVOID) в Inno Setup?

Ответы [ 2 ]

2 голосов
/ 26 мая 2016

Мало было поздно. 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) нужного измерения, а вход, указатель на блок со смещением до необходимого значения.

0 голосов
/ 20 сентября 2010

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

...