Nsis 这条线是什么意思?(系统:调用getfreediskex)

Nsis 这条线是什么意思?(系统:调用getfreediskex),nsis,Nsis,如果我是对的,r0:directoryname,free bytes,number of bytes,number of free bytes,但是r0,,,r1实际上是什么意思呢? 谢谢你的帮助 鉴于$0。$9和$R0。$R9是,系统插件使用符号R0->R9(resp.R10。R19或R0。R9)来指定$0。使用系统API或其他dll函数调用注册为源和/或目标 如果不需要,源或目标之一也可以是点() 查找文档中的“调用函数”和“可用源和目标”部分。${…}是一个定义,因此当您想知道某些事情是如

如果我是对的,r0:directoryname,free bytes,number of bytes,number of free bytes,但是r0,,,r1实际上是什么意思呢?
谢谢你的帮助

鉴于
$0
$9
$R0
$R9
是,系统插件使用符号
R0
->
R9
(resp.
R10
R19
R0
R9
)来指定
$0
使用系统API或其他dll函数调用注册为源和/或目标

如果不需要,源或目标之一也可以是点(


查找文档中的“调用函数”和“可用源和目标”部分。

${…}是一个定义,因此当您想知道某些事情是如何工作的时,您应该做的第一件事是找出定义的作用:
!错误“${sysGetDiskFreeSpaceEx}”
将打印
!错误:kernel32::GetDiskFreeSpaceEx(t,*l,*l,*l)i

在中,您将发现此金块:

参数、返回和选项可以在一次Get/Call中重复多次 线路。当重复时,很多东西可以省略,而且只有你想要的 可以使用更改。类型、来源和/或目的地可以省略 每个参数,甚至返回值。可以添加或删除选项 远离的。这允许您定义函数原型并保存在 一些打字

因此${sysGetDiskFreeSpaceEx}是一个原型,它指定参数计数和类型,但不指定参数源和目标

参数语法是什么

参数列表用逗号分隔。每个参数都是组合的 共有三个值:类型、源和目标。类型可以是整数, 字符串等。作为参数值来源的源可以 是NSIS寄存器($0,$1,$INSTDIR)、NSIS堆栈、混凝土 值(5,“测试”等)或无值(空)。目的地,即 调用返回后参数值的目标可以是 NSIS寄存器、NSIS堆栈或无,这意味着没有输出 必修的。源或目标之一也可以是点(`.') 如果不需要的话

我们现在可以展开整个调用
!错误“System::Call“${sysGetDiskFreeSpaceEx}(r0,,.r1)”
这给了我们
!错误:System::Call'kernel32::GetDiskFreeSpaceEx(t,*l,*l,*l)i(r0,,.r1)

如果我们合并重复的参数定义,就会得到
kernel32::GetDiskFreeSpaceEx(tr0,*l,*l,*l.r1)i

因此,参数1是一个字符串(MSDN上的LPTSTR),源代码为r0(NSIS寄存器$0)

参数2和3没有源和目标,只有参数2使用了一个。(dot)但最终结果相同;没有输入也没有输出。这里唯一重要的部分是*l,因此系统插件知道参数有多大

最后一个参数是指向64位数字(l)的指针(*),没有输入(.),我们请求将输出存储在$1(r1)中

系统插件调用本机Windows API,因此查看MSDN以了解您调用的内容通常很有用

System::Call '${sysGetDiskFreeSpaceEx}(r0,.,,.r1)'