我正在使用Rust编写WinAPI,其中有一些函数(例如EnumWindows())需要回调函数。回调函数通常接受一个额外的参数(类型为LPARAM,是i64的别名),您可以使用它将一些自定义数据传递给回调函数。 我曾经将Vec<T>对象作为LPARAM发送到WinAPI回调函数...
我正在使用Rust调用一个需要空指针作为参数的C函数,然后分配一些内存来指向它。那么,如何高效地(即避免不必要的复制)且安全地(即避免内存泄漏或段错误)将C指针中的数据转换为Vec?我的代码示例如下: extern "C" { // C function that allocates...
我正在创建一个FFI模块,连接到一个在C中的库,该库要求调用一个一次性、不可重入的函数,在任何其他操作之前。这个调用是幂等的,但具有状态,因此我可以在每个Haskell调用中都调用它。但是这样做很慢,并且由于不可重入性可能会导致冲突。 那么现在是使用unsafePerformIO的正确时间吗?...
这是我的情况: 我想调用FFmpeg的av_free_packet函数:// avformat.h static inline void av_free_packet(AVPacket *pkt) { if (pkt && pkt->destruct) pk...
我需要在Rust中编写一个extern "C" FFI函数,并接受一个指定大小的数组。C代码传递类似以下内容: // C code extern int(*)[4] call_rust_funct(unsigned char (*)[3]); .... unsigned char a[] =...
哦,我的天啊,我真是个傻瓜。 在调用函数时,我只是简单地省略了第二和第三个参数。 就像个傻瓜一样。 因为这就是我。 以下是原始的愚蠢问题: 这似乎是一个非常常见的事情,但我找不到相关的教程,而且我对Numpy和ctypes也太无知了,以至于自己无法弄清楚。 我有一个在文件ctest.c中...
我正在尝试在我的C代码中使用Haskell库。我要使用的Haskell函数具有类型String -> IO [Reference],其中Reference是一个相当复杂的结构(详见此处)。 根据阅读各种文档的经验,似乎我需要将这种类型设为Storable的实例,并且还必须在我的C代码中...
在Rust端,我写了一个函数,它返回一个字符串作为字节指针(以C结构在内存中布局): 在Rust侧,我编写了一个函数,该函数返回一个作为字节指针的字符串(在内存中以C结构布局):#[repr(C)] pub struct RustByteSlice { pub bytes: *con...
我正试图将 mocha 绑定写入 PureScript 中,但是 Control.Monad.Eff 使我完全不知所措。describe(function(){ //do stuff }); Describe是一个不需要参数并返回IO、Eff或意味着(发生副作用但没有返回值)的函数。 ...