10得票1回答
一个包含原始指针的结构体是否可以实现Send并且是FFI安全的?

我有一个场景,Rust将调用C来malloc缓冲区,并将结果指针存储到结构体中。随后,该结构体将被移动到线程并传递给一个C函数进行修改。 对于我的问题,简单的解决方案如下所示(playground): extern crate libc; use libc::{c_void, mallo...

7得票1回答
FFI Haskell回调函数与状态

我的问题是如何编写友好的Haskell接口,以模拟可以从C代码调用的回调。回调在此处进行处理(HaskellWiki),但我认为这个问题比该链接中的示例更复杂。 假设我们有需要回调的C代码,头文件如下: typedef int CallbackType(char* input, char*...

24得票2回答
hsc2hs和c2hs有什么区别?

什么是hsc2hs和c2hs之间的区别? 我知道hsc2hs是一个预处理器,但它具体做了什么? c2hs可以从C代码生成Haskell模块,但我是否需要hsc2hs来完成这个操作?

9得票2回答
可存储的空数据声明

我正试图为一个C库创建一个Haskell封装。底层的结构体过于复杂,难以明确表示为类型,而且我实际上只是用它们在C函数之间传递,所以我使用EmptyDataDecls让GHC为我工作。 我需要的是这些数据类型中的一个指针,但当我尝试使用alloca创建一个时,它抱怨数据不是Storable类...

10得票4回答
如何在M1 Mac上安装和运行ffi

我正在使用 'ffi', '~> 1.9'。 当我尝试运行我的Rails项目时,出现了以下错误: rake aborted! LoadError: dlopen(/Users/kanye.west/.rbenv/versions/2.6.9/lib/ruby/gems/2.6.0/g...

20得票4回答
在C语言中,如何使用一个变量参数的列表来构建函数调用?

假设有一些参数以某种方式存储,例如在数组中。 给定一个函数指针,我如何调用它并传递存储的参数列表? 我不是试图将数组作为参数传递。你理解了没,好吧?我想逐个将其元素作为参数传递。数组只是为了说明,我可以将参数存储在某些元组结构中。此外,请注意,我手头有一个函数指针,并且可能具有字符串格式的签名...

11得票3回答
如何在嵌入时使用LuaJIT的ffi模块?

我正在尝试将LuaJIT嵌入到C应用程序中。 代码如下: #include <lua.h> #include <lualib.h> #include <lauxlib.h> #include <stdlib.h> #include <st...

7得票2回答
如何在pub extern "C" fn中返回一个动态长度的向量?

我希望在pub extern "C" fn中返回一个向量。由于向量长度是任意的,我猜我需要返回一个结构体,其中包含: 指向向量的指针 向量中元素的数量 我的当前代码如下: extern crate libc; use self::libc::{size_t, int32_t, int...

32得票2回答
如何将 Rust 的 `Vec<T>` 暴露给 FFI?

我正尝试构建一对元素: array: *mut T array_len: usize array 旨在拥有数据。 然而,Box::into_raw 将返回 *mut [T]。我找不到任何关于将裸指针转换为切片的信息。它在内存中的布局是什么?我如何从 C 中使用它?是否应该转换为 *m...

46得票3回答
如何使用Haskell编写Windows服务应用程序?

我一直在努力用Haskell编写Windows服务应用程序。 背景 服务应用程序由Windows Service Control Manager执行。启动后,它会对StartServiceCtrlDispatcher进行阻塞调用,该函数提供用作服务主函数的回调函数。 服务的主函数应注册第...