Я создал общую библиотеку на C,
const char foo[] = "foo1234";
С FFI :: Platypus Я могу получить местоположение символа, используя
print $ffi->find_symbol('foo'); 140204212527104
Как распечатать значение foo1234?
foo1234
Другой вариант, если вы знаете местоположение и длину буфера, это buffer_to_scalar из FFI :: Platypus :: Buffer . Это очень близкий к металлическому и, следовательно, быстрый вариант, но он опасен, как и большинство кодов C, вы можете легко segfault, используя его неправильно.
buffer_to_scalar
Чтобы получить SVpv, вам нужно привести «непрозрачный» указатель к переменной данных Perl,
SVpv
$ffi->cast(opaque => string => $ffi->find_symbol('foo'));
. Вы можете увидеть это здесь в наборе тестов.