加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Haskell FFI – 如何处理接受或返回结构体而不是结构体指针的C函

发布时间:2020-12-16 05:19:22 所属栏目:百科 来源:网络整理
导读:当然,答案是以某种方式通过/连续的内存块,所以问题更多的是如何做到这一点.现在我仍然可以通过在C端编写封装函数来避免这个问题,但这并不是一个容许的解决方案. 解决方法 FFI不支持任意传递值 Haskell可存储类型. 您只能传递类型的值(其中一些是指针): Int#
当然,答案是以某种方式通过/连续的内存块,所以问题更多的是如何做到这一点.现在我仍然可以通过在C端编写封装函数来避免这个问题,但这并不是一个容许的解决方案.

解决方法

FFI不支持任意传递值 Haskell可存储类型.

您只能传递类型的值(其中一些是指针):

Int#,Word#,Char#,Float#,Double#,Addr#,StablePtr# a,MutableByteArray#,ForeignObj#,and ByteArray#.

所以,要传递一个结构,你必须通过C包装器来包装调用;它需要一个指针并将其值传递给您希望实际调用的C函数.

最近的GHC扩展允许“primop”导入,这绕过了FFI机制,并支持任意调用约定,并通过未装箱的元组传递结构.例如.

foreign import prim "ITCHv41_run"
  parseITCHv41# :: Addr# -> Word#
                -> (# Int#,Word# #)

你可以用这些来做这样的tricky low level stuff.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读