Я хотел бы использовать Fiddle для доступа к собственной библиотеке, скомпилированной из кода Rust. C-представление структуры очень просто, это всего лишь указатель и длина:
typedef struct {
char *data;
size_t len;
} my_thing_t;
// Example function that somehow accepts a struct
void accepts_a_struct(my_thing_t thing);
// Example function that somehow returns a struct
my_thing_t returns_a_struct(void);
Однако все примеры, которые я могу найти, принимают или возвращают указатели на структуры, а не сами структуры. Я бы хотел избежать двойной косвенности, если это вообще возможно.
Я заимствовал пример из Fiddle::Importer
documentation. Однако я не вижу, как правильно вызвать метод extern
со структурой вместо указателя на структуру:
require 'fiddle'
require 'fiddle/import'
module LibSum
extend Fiddle::Importer
dlload './libsum.so'
extern 'double sum(double*, int)'
extern 'double split(double)'
end
Примечание
Fiddle не, как FFI gem. Fiddle является компонентом стандартной библиотеки Ruby и не предоставляется в качестве отдельного драгоценного камня. Эти связанные вопросы относятся к драгоценности FFI, а не к Fiddle: