我正在尝试使用RegSetKeySecurity()
Windows API 的功能,但pSecurityDescriptor
参数是一个指针。PVOID
Inno Setup中的“指针”( )数据类型等价是什么?
2 回答
有点晚了。xD 要解决此问题,您必须使用关键字“var”将函数参数声明为变量。这是声明指向 Pascal 函数参数中变量的指针的标准方法。
哈,我会把想法带到合乎逻辑的结局。首先,InnoSetup 的执行过程在所有 32 位的情况下,也就是说,没有人阻止声明新类型(“PVOID”或“指针”)对应的维度(类型 PVOID = Cardinal;Pointer = Integer;等)更何况它只是为了方便感知。其次,在发布外部 API 函数时,用变量(通过关键字“var”)替换索引是绰绰有余的。第三,由于 Pascal 脚本对内存的特定组织,一些 API 函数将无法处理这些变量,那么你没有人阻止声明使用内存的函数的外部函数(GetMemory,FreeMemory,FillMemory + GetMemory = AllocMemory) 来自 Kernel32.dll。GetMemory 只返回内存站点上的索引。第四,为了从带有索引的块中提取数据,没有人会阻止从同一个 Kernel32.dll 中使用 CopyMemory、StringCchCopyA、lstrcpynA 等复制功能,其中输出参数将是必要维度的变量 (var),并且入口,块上的索引,偏移到必要的值。
Inno Setup 中使用的 Pascal 脚本似乎根本不支持指针。也许您可以只传递一个cardinal
(如果是 32 位),或者您可以在外部 DLL 中编写代码并从 Inno Setup 安装程序中调用它。