问题标签 [c2hs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
82 浏览

haskell - Haskell FFI - 返回更新的结构

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

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

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

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

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

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

0 投票
2 回答
153 浏览

haskell - Haskell如何使用c中的extern FILE *?

我想从一些 c 头文件中导入一个函数,但是如何处理 FILE* 类型的标准错误,它定义为:

也许不准确。我将 c2hs 用于我的 ffi 工作,并且已经拥有:

但我不能像这样导入标准错误:

我的 c 函数具有签名:

我可以用 c2hs 导入 func:

我需要使用 stderr 来运行 func:

我对外国进口机制不熟悉。看来我不能以这种方式导入stderr。

附言。也许我会将我的函数包装在一个新函数中

这是一种解决方法,但似乎不干净。

0 投票
1 回答
118 浏览

haskell - Using alloca- with c2hs

Consider from the c2hs documentation that this:

generates in Haskell

which binds the following C function:

Problem: Here I'm confused what the effect of alloca- has on the left side of, i.e., `Bool'.

Now I know that, in practice, what is happening is that alloca is somehow generating a Ptr Bool that peekBool can convert into an output argument. But what I'm terribly confused about is how alloca is doing this, given its type signature alloca :: Storable a => (Ptr a -> IO b) -> IO b. More specifically:

Question 1. When someone calls notebookQueryTabLabelPacking in Haskell, what does c2hs provide as argument for alloca's first parameter (Ptr a -> IO b)?

Question 2. In this case, what is the concrete type signature for alloca's first paramater (Ptr a -> IO b)? Is it (Ptr CBool -> IO CBool)?

0 投票
1 回答
72 浏览

haskell - 编组器中的 c2hs 与 gtk2hsC2hs

我试图理解c2hsgtk2hsC2hsc2hs用于的修改版本gtk2hs)之间的区别。考虑以下编码:

第二fun行(例如cairo_pattern_get_matrix)适用于两种工具(尽管生成的代码不同),而第一行(例如cairo_pattern_set_matrix)仅适用于gtk2hsC2hs.

使用时的错误信息c2hs是:

我不清楚这里的问题,但从我的角度来看,这应该是有效的。

我用于c2hs

gtk2hsC2hs

提前致谢

0 投票
0 回答
83 浏览

pointers - C2HS 指针类型对应关系

0 投票
1 回答
26 浏览

ghc - 如何让 c2hs 与 ghc CPP 扩展一起工作?

我在.hs 中有一些#IF 和#ENDIF。如果我只是将文件重命名为 .chs,则 #IF 和 #ENDIF 只是移动到 c2hs 生成的 .h 而不是 c2hs 生成的 .hs。

我没有在https://github.com/haskell/c2hs/wiki/Implementation-of-Haskell-Binding-Modules中看到这一点。

知道怎么做吗?谢谢。

0 投票
1 回答
38 浏览

haskell - 为绑定编写文档的正确方法是什么?

在为一些用 C 编写的库编写 Haskell 绑定时,必须做的事情是以黑线鳕格式编写文档。但是由于通常绑定很简单,因此文档将只是原始库文档的重新格式化。

所以我的问题是,是否有一些工具可以帮助解决这个问题?谢谢。

0 投票
1 回答
150 浏览

c - 带有 c2hs 的 Haskell FFi:更好的结构外编组

假设您有一个提供 C 结构的 C API

以及填充它的函数:

例如,这可能是从 C API 内部获取某些信息的 getter。

在 Haskell 中,C 结构将被镜像

Storable实例是

peek 和 poke 与c2hs 处理的{#get...#}和pragma 一样正常。{#set #}

Haskell 函数getA :: IO A应该类似于

除了这不起作用,因为 c2hs 创建了这个绑定:

Ptr ()作为第一个论点。这可以通过

allocaA很重要,因为它确保A分配内存而不是仅使用()if的内存alloca

虽然这可行,但它有点乏味,而且如果你忘记写allocaXYZ而不是只写alloca. (我刚刚看到花了很多时间来追踪一个这样的错误。)

我希望找到一个{#fun...#}产生的咒语

其他一切都会自然而然地遵循(注意Ptr A代替Ptr ())。但据我所知,只有{allocXYZ- 'XYZ' peekXYZ*}路线。

所以问题是:这可以用更好的方式完成c2hs吗?