11得票1回答
如何通过原始指针将闭包作为参数传递给C函数?

我正在使用Rust编写WinAPI,其中有一些函数(例如EnumWindows())需要回调函数。回调函数通常接受一个额外的参数(类型为LPARAM,是i64的别名),您可以使用它将一些自定义数据传递给回调函数。 我曾经将Vec<T>对象作为LPARAM发送到WinAPI回调函数...

7得票1回答
如何从C数组指针创建一个Vec并在Rust中安全地释放它?

我正在使用Rust调用一个需要空指针作为参数的C函数,然后分配一些内存来指向它。那么,如何高效地(即避免不必要的复制)且安全地(即避免内存泄漏或段错误)将C指针中的数据转换为Vec?我的代码示例如下: extern "C" { // C function that allocates...

13得票2回答
unsafePerformIO和FFI库初始化

我正在创建一个FFI模块,连接到一个在C中的库,该库要求调用一个一次性、不可重入的函数,在任何其他操作之前。这个调用是幂等的,但具有状态,因此我可以在每个Haskell调用中都调用它。但是这样做很慢,并且由于不可重入性可能会导致冲突。 那么现在是使用unsafePerformIO的正确时间吗?...

10得票2回答
Haskell FFI:调用FunPtrs

这是我的情况: 我想调用FFmpeg的av_free_packet函数:// avformat.h static inline void av_free_packet(AVPacket *pkt) { if (pkt && pkt->destruct) pk...

10得票1回答
如何在Rust中表示指向C数组的指针?

我需要在Rust中编写一个extern "C" FFI函数,并接受一个指定大小的数组。C代码传递类似以下内容: // C code extern int(*)[4] call_rust_funct(unsigned char (*)[3]); .... unsigned char a[] =...

67得票2回答
将Numpy数组传递给C函数进行输入和输出

哦,我的天啊,我真是个傻瓜。 在调用函数时,我只是简单地省略了第二和第三个参数。 就像个傻瓜一样。 因为这就是我。 以下是原始的愚蠢问题: 这似乎是一个非常常见的事情,但我找不到相关的教程,而且我对Numpy和ctypes也太无知了,以至于自己无法弄清楚。 我有一个在文件ctest.c中...

11得票2回答
基于复杂的Haskell类型生成C结构体

我正在尝试在我的C代码中使用Haskell库。我要使用的Haskell函数具有类型String -> IO [Reference],其中Reference是一个相当复杂的结构(详见此处)。 根据阅读各种文档的经验,似乎我需要将这种类型设为Storable的实例,并且还必须在我的C代码中...

11得票1回答
从Swift调用Rust

在Rust端,我写了一个函数,它返回一个字符串作为字节指针(以C结构在内存中布局): 在Rust侧,我编写了一个函数,该函数返回一个作为字节指针的字符串(在内存中以C结构布局):#[repr(C)] pub struct RustByteSlice { pub bytes: *con...

7得票2回答
使用Luajit时,使用FFI还是普通的Lua绑定更好?

我刚开始使用C++和Luajit进行尝试,我发现它的FFI非常易于使用,但我不确定它是否是所有情况(或至少大多数情况)下的最佳解决方案。 那么,使用其中一个比另一个更好,还是只是个人喜好?

12得票1回答
PureScript FFI 到 mocha。

我正试图将 mocha 绑定写入 PureScript 中,但是 Control.Monad.Eff 使我完全不知所措。describe(function(){ //do stuff }); Describe是一个不需要参数并返回IO、Eff或意味着(发生副作用但没有返回值)的函数。 ...