gpt4 book ai didi

haskell - c2hs:绑定(bind)常量

转载 作者:行者123 更新时间:2023-12-02 03:38:27 25 4
gpt4 key购买 nike

我正在尝试使用 c2hs 快速绑定(bind)一些 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: Feature not yet implemented: GenBind.evalConstCExpr: Casts are not implemented yet.

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

我应该放弃使用 c2hs 并使用其他东西吗?除了简单地硬编码常量值之外,是否有解决此问题的明智方法?

最佳答案

c2hs 的 {#enum ... #} 功能只真正处理整数枚举值,如 C/C++ 中的 enum 所定义。您正在处理这些 #defines,而 c2hs 无法处理这种情况。

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

关于haskell - c2hs:绑定(bind)常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21759531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com