Tôi đang làm việc với giao diện NativeCall.Làm thế nào tôi có thể vượt qua một đối tượng Perl 6 thông qua một cuộc gọi lại Nativecall?
Thư viện sẽ gọi hàm gọi lại của tôi nhiều lần.
Điều đó hoạt động tốt. Tôi chỉ có thể khai báo cuộc gọi lại của mình với chữ ký đúng, chuyển nó thành số & gọi lại và thư viện gọi điện cho tiểu chỉ là .
Nó cũng có khả năng đặt con trỏ void * tải trọng thành bất kỳ thứ gì Tôi muốn và nó sẽ bao gồm trong cuộc gọi đến hàm gọi lại của tôi.
Tôi có thể ẩn một đường Perl, ví dụ, trong tải trọng và chuyến đi khứ hồi thành công không?
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);
Dường như nó có thể hoạt động với một số câu thần chú ràng buộc, "là rw", nativecast() và/hoặc .deref.
Mặc dù Jonathan Worthington đưa ra một cách tiếp cận tốt hơn, tôi nghĩ rằng một ví dụ rút gọn về nỗ lực của bạn sẽ được mát mẻ để xem trong câu trả lời này, như mọi người có thể thảo luận nếu giải pháp của bạn có giá trị, và nếu nó thực sự bị rò rỉ bộ nhớ. Đây là một trang web học tập sau khi tất cả. –