问题标签 [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 投票
0 回答
61 浏览

c - c2hs 绑定 typedef 和 function

我正在尝试为 C 中的函数正确创建 haskell 绑定,该绑定分为 2 个文件。

文件1.h:typedef const char* fmi2GetTypesPlatformTYPE(void);

文件2.h:__declspec(dllexport) fmi2GetTypesPlatformTYPE fmi2GetTypesPlatform;

为了在 Haskell 中匹配这个,我创建了一个类似的结构,但这就是问题所在。

文件 1.chs:type fmi2GetTypesPlatformTYPE = {#type fmi2GetTypesPlatformTYPE#}

如何使用这种类型创建 Haskell 函数指针?我已经用 导入了文件{#import file1 #},但是我不知道如何完成最后一部分。

请参阅https://github.com/haskell/c2hs/issues/142 我将在解决后发布答案(除非 Ian-ross 击败我 :))

0 投票
1 回答
275 浏览

haskell - Cabal 使用 c2hs 构建未找到 .chs 模块

我正在尝试 c2hs,并想用 Cabal 编译一个共享库的小例子来开始。

我有以下 cabal 文件的相关部分test.cabal

然后是源。src/Dummy.hs

在文件中src/Test.chs

然后,当我尝试编译 ( cabal configure && cabal build -v) 时,我收到以下错误消息:

拜托,你能告诉我错误的原因是什么吗?我错过了什么?

0 投票
1 回答
1227 浏览

haskell - Cabal 安装 gtk 失败

我正在尝试通过 cabal 安装 gtk,但是,在构建它时出现以下类型错误

要安装此软件包,您需要“gtk2hsC2hs”,并且类型错误在.chs文件中,可能是由 gtk2hsC2hs 工具生成的。这是 gtk2hsC2hs 的已知问题吗?有没有其他人能够构建这个包?有人知道解决方案吗?

我在 Mac OS X Yosemite (10.10.4) 上

我已经完成了cabal update,所以我所有的包似乎都是最新的。我也尝试过构建一些可从 hackage 获得的旧版本,但我遇到了同样的错误。

编辑

生成文件中的错误似乎都与 gtk2hsC2hs 生成的 FFI 导入有关。在文件的底部,我得到

它似乎一直Ptr()Maybe DrawWindow. 那么生成的类型是Ptr()不正确的,还是它的用法不正确?

0 投票
1 回答
85 浏览

haskell - 尝试将 ForeignPtr 参数用于动态包装器时出错

我正在尝试使用 c2hs 包装一个 C 库。我有一个不透明的 C 结构,我在 Haskell 中映射如下:

我使用了一个外部指针,所以我可以使用终结器自动清理。所有这些似乎工作正常。但是,我现在想包装一个如下所示的函数指针:

我的 Haskell 代码如下所示:

但是,当我编译时出现以下错误:

有关此错误的最佳解决方案的任何想法?我最初的想法是我需要使用unsafeForeignPtrToPtrto 转换为一个 foo 指针,但我不确定如何执行此操作/将其放入“包装器”的位置。

有什么线索吗?

0 投票
1 回答
222 浏览

haskell - 如何在 Haskell 中调用使用回调的 C 函数?

我正在尝试从using调用以下C函数。Haskellc2hs

我不熟悉c2hs并且在声明绑定时遇到了麻烦。

这是我尝试过的:

但是,在编译此代码时出现以下错误:

我不明白缺少什么部分PtrFunPtr这里。我还尝试将整个包装rdKafkaConfSetRebalanceCbFunPtr这样:

不确定它是否有意义,尽管它可以编译......但是我不知道如何使用这个函数,这就是我尝试过的(这是我最后想要的签名):

现在它抱怨我没有要调用的函数,只有一个指向函数的指针(因为那个FunPtr包装)。

你能告诉我如何C正确地为C上面的签名完成绑定吗?

0 投票
1 回答
119 浏览

haskell - C2HS编组双指针

当有这样的功能时:

有没有办法让 C2HS 生成具有以下签名的 Haskell 绑定?

到目前为止,这是我能得到的:

它以我得到的方式工作

但是我如何让它返回IO (SomeTypeFPtr, String)
(或者更好IO (Either String SomeTypeFPtr)),因为String代表错误)?

我假设我应该使用/编写一个不同的编组器来使用而不是peek转换结果类型,但我不太明白如何去做。

0 投票
1 回答
48 浏览

c - C 枚举的大 c2hs 推断大小

当编写Storable具有 5 个选项的 C 枚举实例时(使用 c2hs),{# sizeof #}宏返回 4(即 4 个字节)。当 3 位就足够时,这不是非常浪费吗?这是否取决于内存字的大小?

0 投票
1 回答
723 浏览

c - inline-c : "`Type` 不能在外部调用中编组"

环境

AC 枚举类型由 c2hs 渲染到 Haskell 中,并带有Storable正确编译的实例 ( TypesC2Hs.chs)。我将这个不合格的导入到我为inline-c上下文 ( Internal.hs) 分配的模块中。.hs由 c2hs 生成的模块和Internal.hs由 导入的模块,InlineC.hs另一个inline-c模块包含包装 C 调用的准引号。

问题

InlineC.hs抱怨这种类型无法编组:“外部声明中不可接受的参数类型:'DMBoundaryType' 不能在外部调用中编组检查声明时:”

到底是怎么回事?这是第一次inline-c给我这种错误的类型。

我应该注意,不需要直接取消引用的其他类型,例如newtype DM = DM (Ptr DM) deriving Storable,可以使用上述方法正常工作。

提前致谢


类型C2Hs.chs

内部.hs

内联C.hs

0 投票
1 回答
135 浏览

haskell - 使用 c2hs 时,我应该如何调试“符号 X 不适合此处”错误?

我是使用 c2hs 并遇到此问题的新手。

我不知道如何开始调试它,也没有通过谷歌搜索或查看 GitHub 上的问题找到任何东西。

我应该从哪里开始,有哪些资源可以提供帮助?

提前致谢。

0 投票
1 回答
137 浏览

haskell - 要求堆栈将额外的命令行参数传递给 c2hs

我使用c2hs来简化将 Haskell 绑定编写到 C/C++ 库的过程。我最近也开始使用堆栈来管理我的 Haskell 项目。

要使用 c2hs,我需要#include "myheader.h"在我的 Haskell 源代码中添加一行内容;这myheader.h是我的 C/C++ 库的接口文件。

我今天发现,除了将这#include一行嵌入到.chs源文件中,还可以在调用 c2hs 时传递头文件的位置,如下所示

c2hs /<path-to-my-header>/myheader.h Foo.chs

值得庆幸的是,当文件具有 .chs 扩展名时,堆栈会自动检测,然后在其上调用 c2hs。我的问题是,我如何告诉堆栈在调用 c2hs 时传递这个额外的命令行参数(即头文件的位置)?我需要对我的 .cabal 或 stack.yaml 文件进行哪些更改?