我希望使用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 gem不同。 Fiddle是Ruby标准库的组件,不作为单独的gem提供。 这些相关问题涉及FFI gem,而不涉及Fiddle:
RBasic
和子类)的结构体的指针,甚至从那里指向堆中实际数据的另一个指针。 - Eugene Petrovparse_ctype
函数中获取。 - Eugene Petrov