如何使用FFI :: Platypus从指针引用中获取字符串值?

时间:2019-06-06 13:43:26

标签: perl ffi perl5

我已经用C建立了一个共享库,

const char foo[] = "foo1234"; 

使用FFI::Platypus,我可以使用

来获取符号位置
print $ffi->find_symbol('foo');
140204212527104

如何打印foo1234的值?

2 个答案:

答案 0 :(得分:1)

为了获得SVpv,您需要将“不透明”指针转换为Perl数据变量,

$ffi->cast(opaque => string => $ffi->find_symbol('foo'));

您可以see this here in the test suite.

答案 1 :(得分:1)

如果您知道缓冲区的位置和长度是FFI::Platypus::Buffer中的buffer_to_scalar,则可以使用另一个选项。这是非常接近金属的选项,因此是一种快速选择,但是它像大多数C代码一样危险,您可以通过错误使用它来轻松进行段错误。