我已经用C建立了一个共享库,
const char foo[] = "foo1234";
使用FFI::Platypus,我可以使用
来获取符号位置print $ffi->find_symbol('foo');
140204212527104
如何打印foo1234
的值?
答案 0 :(得分:1)
为了获得SVpv
,您需要将“不透明”指针转换为Perl数据变量,
$ffi->cast(opaque => string => $ffi->find_symbol('foo'));
答案 1 :(得分:1)
如果您知道缓冲区的位置和长度是FFI::Platypus::Buffer中的buffer_to_scalar
,则可以使用另一个选项。这是非常接近金属的选项,因此是一种快速选择,但是它像大多数C代码一样危险,您可以通过错误使用它来轻松进行段错误。