Haskell中的FFI,关于LANGUAGE CPP的问题以及如何在FFI中使用ac结构

ewg*_*egw 7 haskell ffi

我对Haskell中的FFI有一些疑问

  1. 我知道我必须使用语言编译指示{-# LANGUAGE ForeignFunctionInterface #-},但当我使用{-# LANGUAGE CPP, ForeignFunctionInterface #-}CPP可以"更多"做什么时,有什么区别
  2. 我在c中使用了一个使用a的函数struct,如何在FFI中处理这个?
  3. 什么时候我必须使用CInt什么时候Int

Don*_*art 6

  1. 如果启用CPP语言扩展,则可以合法地将C预处理器语法包含在Haskell程序中.
  2. 访问结构有点复杂.最简单的方法可能是使用Storable类型类来定义peekpoke对结构的每个字段的方法.该hsc2hs工具可以提供帮助.
  3. CInt无论何时需要将Haskell传递给IntC或从C 传递,都可以使用,因为这将确保发生任何所需的编组(同样的CDouble,CString等等).

X11包有很多通过FFI定义和编组结构的例子.


更多信息: