首页 文章

Haskell FFI双指针参数

提问于
浏览
1

我想用下面的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 回答

  • 2

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

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

    谢谢你们!将及时向大家发布

相关问题