Haskell FFI双指针参数

时间:2015-03-22 23:51:43

标签: haskell ffi

我想用以下sig。包装一组C函数:

ErrorCode Initialize(int *argc,char ***args, ...)

FFI调用中如何表示双指针?它是一个指向字符串列表的指针;以下是合理的吗?

foreign import ccall unsafe "lib.h Initialize"
    c_initialize :: Ptr CInt 
                 -> Ptr [String]
                 -> IO (Ptr CInt)

或者第二个参数是Ptr (Ptr Char)?我到目前为止所阅读的文献中找不到这个案例(真实世界Haskell和Wikibook),我的C有点生疏。 提前致谢

- 更正: RWH实际上显示了pcre_compile()的接口:

-- PCRE-compile.hs
foreign import ccall unsafe "pcre.h pcre_compile"
  c_pcre_compile :: CString
                 -> PCREOption
                 -> Ptr CString
                 -> Ptr CInt
                 -> Ptr Word8
                 -> IO (Ptr PCRE)

对应于:

-- pcre.h
pcre *pcre_compile(const char *pattern,
               int options,
               const char **errptr,
               int *errofset,
               const unsigned char *tableptr);

1 个答案:

答案 0 :(得分:2)

因此,考虑到所有这些建议,似乎最合适的签名就像是

foreign import ccall unsafe "lib.h Initialize"
c_initialize :: Ptr CInt 
             -> Ptr (Ptr CString)
             -> IO (Ptr CInt)

谢谢大家!会让你发布