Я работаю с интерфейсом NativeCall.
Библиотека будет вызывать мою функцию обратного вызова несколько раз.
Это нормально работает. Я могу просто объявить свой обратный вызов с правильной подписью, передать его как обратный вызов &, и библиотека вызовет подпрограмму нормально.
У него также есть возможность установить указатель void * полезной нагрузки на все, что я хочу, и он будет включать это в вызов моей функции обратного вызова.
Могу ли я спрятать Perl Str, например, в полезной нагрузке и успешно передать его туда и обратно?
sub set_userdata(Pointer) returns int32 is native { ... }
sub set_callback(&callback(Pointer $userdata --> int32)) returns int32 is native { ... }
sub callback(Pointer $userdata) returns int32 {
my Str $mystring = ???
...
}
my Str $my-userdata-string;
set_userdata(???);
set_callback(&callback);
Похоже, это могло бы работать с некоторыми заклинаниями привязки, "is rw", nativecast () и / или .deref.