我有很多C结构,如
typedef struct {
unsigned int a;
unsigned int b;
} StructA;
还有很多功能,比如
void doSomethingWith(StructA*,StructB*,StructC*);
有没有一种简单的方法可以使用Haskell FFI调用这些函数?就像,有什么东西像& amp; C中的运算符? (我想没有,但如果我想知道的话)。我有来使Haskell端data
的可存储实例(我没有这些结构的任何构造函数)。
另外:如果我必须传递结构而不是结构指针(不是假设的问题,我有一些类似的函数 - 它不是我的代码,所以我不能做任何事情),我可以通过结构的组件相反?就像我想打电话一样
void function(StructA);
我可以用
做到这一点foreign import ccall "function" :: CUInt -> CUInt -> IO()
答案 0 :(得分:4)
要将对Haskell数据的引用传递给C,其中内存在Haskell堆中分配,而C将直接对数据进行操作,您需要:
StructA
相同的字节结构的Storable
实例。)这种方法需要考虑几个后果:
其他选择:
StablePtr