导出的变量
Last updated
Last updated
Koffi 2.6 中的新功能
要查找导出的变量并声明变量,请使用lib.symbol(name, type)
。您需要指定其名称和类型。
您不能直接操作这些变量,请使用:
读取它们的值
改变它们的值
Koffi 2.2 中的新增功能,Koffi 2.3 中的更改
用于koffi.decode()
解码 C 指针,包装为外部对象或简单数字。
有些参数是可选的,可以通过多种方式调用该函数:
koffi.decode(value, type)
:无偏移
koffi.decode(value, offset, type)
:解码前添加到指针的显式偏移量
默认情况下,Koffi 在解码字符串时期望以 NUL 结尾的字符串。如果您需要指定字符串长度,请参见下文。
以下示例说明如何解码整数和 C 字符串变量。
还有一个可选的结束length
参数,您可以在两种情况下使用:
使用它给出 non-NUL 终止字符串中要解码的字节数:koffi.decode(value, 'char *', 5)
。
将连续值解码为数组。例如,以下是如何解码具有 3 个浮点值的数组:koffi.decode(value, 'float', 3)
。这相当于koffi.decode(value, koffi.array('float', 3))
。
下面的示例将解码上面定义的符号my_string
,但仅解码前三个字节。
Koffi 2.6 中的新功能
用于koffi.encode()
将 JS 值编码为 C 符号或指针,包装为外部对象或简单数字。
有些参数是可选的,可以通过多种方式调用该函数:
koffi.encode(ref, type, value)
:无偏移
koffi.encode(ref, offset, type, value)
:编码前添加到指针的显式偏移量
我们将重用上面显示的示例并使用koffi.encode()
更改变量值。
当编码字符串(直接或嵌入数组或结构中)时,内存将绑定到原始指针值并由 Koffi 管理。您可以一次又一次地分配给同一个字符串,而不会出现任何泄漏或释放后使用的风险。
还有一个可选的结束length
参数,可用于对数组进行编码。例如,以下是如何使用 3 个浮点值对数组进行编码:koffi.encode(symbol, 'float', [1, 2, 3], 3)
。这相当于koffi.encode(symbol, koffi.array('float', 3), [1, 2, 3])
。