Я хотел бы использовать 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
. . Однако я не вижу, как правильно вызвать метод 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. Fiddle является компонентом стандартной библиотеки Ruby и не предоставляется как отдельный гем. Эти связанные вопросы относятся к драгоценному камню FFI, а не к Fiddle:
RBasic
и подклассы) или даже еще один указатель оттуда на фактические данные в куче. - person Eugene Petrov   schedule 28.06.2015