0

我有以下C要调用的函数Haskell

void read_params_for (property_list_t *props);

该函数应该接收一些property_list_t并在其中填充一些值,因此调用者具有更新的结构。

我有所有必要的包装器property_list_t(比如Storable等),但我不知道如何把这个函数包装成类似的东西

readParamsFor :: ForeignPtr PropertyListT -> IO (ForeignPtr PropertyListT)

我尝试使用C2HS,还尝试手动编写 FFI 绑定,例如:

foreign import ccall "read_params_for"
    readParamsFor' :: Ptr PropertyListT -> IO ()

readParamsFor :: ForeignPtr PropertyListT -> IO (ForeignPtr PropertyListT)
readParamsFor ps = do
    withForeignPtr ps $ \ps' -> do
        res <- readParamsFor' ps'
        pl <- newForeignPtr propertyListDestroy ps'
        return pl

但在这两种情况下,我都得到了我原来的“人口不足”名单。

如何将更新的结构返回给 Haskell?

4

1 回答 1

0

我意识到我想使用的 C 库中有一个错误,而且确实,withForeignPtr如果错误不存在,一个简单的就足够了。

于 2017-09-08T09:24:14.900 回答