c2hs:绑定常量

时间:2014-02-13 16:12:20

标签: haskell ffi c2hs

我正在尝试使用c2hs快速绑定一些ioctl函数(特别是获取和设置窗口大小)。这是我所拥有的相关部分:

{-# LANGUAGE ForeignFunctionInterface #-}

#include <sys/ttycom.h>
#include <sys/ioctl.h>

module A where
  import Foreign.Storable
  import Foreign.Ptr
  import Foreign.C

  {#enum define TIO {TIOCGWINSZ as GetWinsz, TIOCSWINSZ as SetWinsz} deriving (Eq) #}

https://gist.github.com/nc6/8977936提供完整代码)

当我尝试编译时,我得到:

  

c2hs:功能尚未实现:     GenBind.evalConstCExpr:Casts尚未实现。

我猜这个问题的原因是C consts是使用Haskell预处理器无法处理的一些辅助函数(_IOW_IOR)来定义的。但是,目前尚不清楚如何最好地解决这个问题。我尝试在#c ... #endc部分中定义枚举并使用直接enum挂钩,但这给出了完全相同的问题。

我应该放弃使用c2hs并使用别的东西吗?是否有一种明智的方法来解决这个问题,而不是简单地对常数值进行硬编码?

1 个答案:

答案 0 :(得分:1)

c2hs的{#enum ... #}功能只能真正处理整数枚举值,由C / C ++中的enum定义。你正在处理这些#defines和c2hs只是不处理这种情况。

您可能需要查看hsc2hs和bindings-dsl,因为this answer from 2011建议适合处理更复杂的FFI示例。