Я пытаюсь использовать функцию RegSetKeySecurity()
для Windows API, но параметр pSecurityDescriptor
является указателем. Что такое «указатель» (PVOID
) эквивалентность типа данных в Inno Setup?Что такое эквивалентность типа данных «указатель» (PVOID) в Inno Setup
ответ
Pascal Scripting, используемый в Inno Setup, кажется, не поддерживает указатели. Возможно, вы можете просто передать cardinal
(если 32-разрядный), или вы можете написать свой код во внешней DLL и вызвать это из программы установки Inno Setup.
Немного опоздал. 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) нужного размера и вход, индекс на блоке со смещением до нужного значения.
Извините, я мог казаться бестактным, но я, вероятно, ответил на предыдущие комментарии. (Мой ответ исправлен и расширен) –
спасибо, я попробую. – Phantom