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

标签 haskell ffi

我对 Haskell 中的 FFI 有一些疑问

  • 我知道我必须使用语言编译指示 {-# LANGUAGE ForeignFunctionInterface #-}但是当我使用 {-# LANGUAGE CPP, ForeignFunctionInterface #-} 时有什么区别?我可以用 CPP 做什么“更多”
  • 我在 c 中使用一个函数,它使用 struct ,我如何在 FFI 中处理这个问题?
  • 当我必须使用 CInt当只是 Int ?
  • 最佳答案

  • 如果启用 CPP语言扩展,然后您可以合法地将 C 预处理器语法合并到您的 Haskell 程序中。
  • 访问结构有点复杂。最简单的方法可能是使用 the Storable typeclass定义 peekpoke结构的每个字段的方法。 hsc2hs工具可以提供帮助。
  • 您使用 CInt每当您需要通过 Haskell Int往返于 C,因为这将确保进行任何所需的编码(CDoubleCString 等也是如此)。

  • X11 包有 many examples通过 FFI 定义和编码结构。

    更多信息在:
  • RWH ch 17.
  • FFI Introduction on the Haskell wiki
  • Foreign.* in the base library
  • 关于haskell - Haskell 中的 FFI,关于 LANGUAGE CPP 的问题以及如何在 FFI 中使用 c 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5889096/

    相关文章:

    haskell - 从 Haskell 字符串中切割特定的 block

    file - Haskell读取文件行

    visual-studio - Rust 代码无法链接到在 Windows 上编译的 C 库,因为存在未解析的外部符号

    c - Erlang 产生大量 C 进程

    function - 为什么函数指针的行为在 Rust 中会根据函数指针的可变性而有所不同?

    c - 从 Julia 更新 C 结构的字段值

    arrays - 如何自动将纯代码转换为使用可变数组的代码以提高效率?

    haskell - 功能等同于迭代二维数组

    haskell - 在同一个端口上监听 TCP 和 UDP

    haskell - 将 OCaml 代码与共享库链接