Как получить строковое значение из указателя-ссылки, используя FFI :: Platypus? - PullRequest
1 голос
/ 06 июня 2019

Я создал общую библиотеку на C,

const char foo[] = "foo1234"; 

С FFI :: Platypus Я могу получить местоположение символа, используя

print $ffi->find_symbol('foo');
140204212527104

Как распечатать значение foo1234?

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Другой вариант, если вы знаете местоположение и длину буфера, это buffer_to_scalar из FFI :: Platypus :: Buffer . Это очень близкий к металлическому и, следовательно, быстрый вариант, но он опасен, как и большинство кодов C, вы можете легко segfault, используя его неправильно.

1 голос
/ 06 июня 2019

Чтобы получить SVpv, вам нужно привести «непрозрачный» указатель к переменной данных Perl,

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

. Вы можете увидеть это здесь в наборе тестов.

...