我正在开发一个 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)