问题标签 [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.
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 击败我 :))
haskell - Cabal 使用 c2hs 构建未找到 .chs 模块
我正在尝试 c2hs,并想用 Cabal 编译一个共享库的小例子来开始。
我有以下 cabal 文件的相关部分test.cabal
:
然后是源。src/Dummy.hs
:
在文件中src/Test.chs
然后,当我尝试编译 ( cabal configure && cabal build -v
) 时,我收到以下错误消息:
拜托,你能告诉我错误的原因是什么吗?我错过了什么?
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()
不正确的,还是它的用法不正确?
haskell - 尝试将 ForeignPtr 参数用于动态包装器时出错
我正在尝试使用 c2hs 包装一个 C 库。我有一个不透明的 C 结构,我在 Haskell 中映射如下:
我使用了一个外部指针,所以我可以使用终结器自动清理。所有这些似乎工作正常。但是,我现在想包装一个如下所示的函数指针:
我的 Haskell 代码如下所示:
但是,当我编译时出现以下错误:
有关此错误的最佳解决方案的任何想法?我最初的想法是我需要使用unsafeForeignPtrToPtr
to 转换为一个 foo 指针,但我不确定如何执行此操作/将其放入“包装器”的位置。
有什么线索吗?
haskell - 如何在 Haskell 中调用使用回调的 C 函数?
我正在尝试从using调用以下C
函数。Haskell
c2hs
我不熟悉c2hs
并且在声明绑定时遇到了麻烦。
这是我尝试过的:
但是,在编译此代码时出现以下错误:
我不明白缺少什么部分Ptr
或FunPtr
这里。我还尝试将整个包装rdKafkaConfSetRebalanceCb
成FunPtr
这样:
不确定它是否有意义,尽管它可以编译......但是我不知道如何使用这个函数,这就是我尝试过的(这是我最后想要的签名):
现在它抱怨我没有要调用的函数,只有一个指向函数的指针(因为那个FunPtr
包装)。
你能告诉我如何C
正确地为C
上面的签名完成绑定吗?
haskell - C2HS编组双指针
当有这样的功能时:
有没有办法让 C2HS 生成具有以下签名的 Haskell 绑定?
到目前为止,这是我能得到的:
它以我得到的方式工作
但是我如何让它返回IO (SomeTypeFPtr, String)
(或者更好IO (Either String SomeTypeFPtr))
,因为String
代表错误)?
我假设我应该使用/编写一个不同的编组器来使用而不是peek
转换结果类型,但我不太明白如何去做。
c - C 枚举的大 c2hs 推断大小
当编写Storable
具有 5 个选项的 C 枚举实例时(使用 c2hs),{# sizeof #}
宏返回 4(即 4 个字节)。当 3 位就足够时,这不是非常浪费吗?这是否取决于内存字的大小?
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
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 文件进行哪些更改?