我正在尝试使用 c2hs 包装一个 C 库。我有一个不透明的 C 结构,我在 Haskell 中映射如下:
{#pointer *foo as Foo foreign newtype #}
我使用了一个外部指针,所以我可以使用终结器自动清理。所有这些似乎工作正常。但是,我现在想包装一个如下所示的函数指针:
typedef void (*hook_func)(foo *f, int a);
我的 Haskell 代码如下所示:
type HookFunc = Foo -> Int -> IO ()
foreign import ccall "wrapper"
mkHookFunc :: HookFunc -> IO (FunPtr HookFunc)
但是,当我编译时出现以下错误:
Unacceptable argument type in foreign declaration:
ForeignPtr Foo
有关此错误的最佳解决方案的任何想法?我最初的想法是我需要使用unsafeForeignPtrToPtr
to 转换为一个 foo 指针,但我不确定如何执行此操作/将其放入“包装器”的位置。
有什么线索吗?