Haskell FFI 双指针参数
Haskell FFI double pointer argument
我想用以下符号包装一组 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);
所以,考虑到所有这些建议,最合适的签名似乎是
foreign import ccall unsafe "lib.h Initialize"
c_initialize :: Ptr CInt
-> Ptr (Ptr CString)
-> IO (Ptr CInt)
谢谢大家!会及时通知你
我想用以下符号包装一组 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);
所以,考虑到所有这些建议,最合适的签名似乎是
foreign import ccall unsafe "lib.h Initialize"
c_initialize :: Ptr CInt
-> Ptr (Ptr CString)
-> IO (Ptr CInt)
谢谢大家!会及时通知你