Я работаю над интерфейсом NativeCall; есть функция C, которая принимает обратный вызов, определенный как:
typedef void (* ExifContentForeachEntryFunc) (ExifEntry *, void *user_data);
void exif_content_foreach_entry (ExifContent *content, ExifContentForeachEntryFunc func, void *user_data);
Мой первый прием был:
sub exif_content_foreach_entry(ExifContent $exifcontent, &func (ExifEntry $entry, Buf $data), Buf $user_data) is native(LIB) is export { * }
но при вызове эта функция выдает ошибку:
Internal error: unhandled dyncall callback argument type
in method CALL-ME at /opt/rakudo-pkg/share/perl6/sources/24DD121B5B4774C04A7084827BFAD92199756E03 (NativeCall) line 588
Если я игнорирую аргумент user_data, все работает, поэтому остальная часть объявления в порядке: я просто не могу передать дополнительные данные в функцию обратного вызова.
В других случаях я использовал Buf для передачи блока (возможно) двоичных данных в функцию C, и это работало; разница здесь в функции обратного вызова. Любая идея, как решить эту проблему?
(используя perl6 2018.03)