问题标签 [ffi]
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.
python - Python:SWIG 与 ctypes
在 python 中,在什么情况下 SWIG 比 ctypes 更适合调用共享库中的入口点?假设您还没有 SWIG 接口文件。
两者的性能指标是什么?
.net - 你如何在 Mono 中进行 ALSA?
有谁知道如何在 Linux 中使用 Mono 访问 ALSA(低级音频 API)?
注意:我希望使用 PInvoke 访问 ALSA。
c - Haskell FFI / C MPFR 库包装问题
为了创建任意精度的浮点数/替换 Double,我尝试使用 FFI 包装MPFR,但尽管我付出了所有努力,但最简单的代码仍然不起作用。它编译,它运行,但在假装工作一段时间后它会模拟地崩溃。一个简单的 C 版本代码可以愉快地将数字“1”打印到(小数点后 640 位)总共 10,000 次。Haskell 版本,当被要求做同样的事情时,在“1.0000...0000”的 289 次打印输出和 385 次打印输出后默默地破坏(?)数据,它导致断言失败和炸弹。我不知道如何继续调试它,因为它“应该工作”。
该代码可以在http://hpaste.org/10923阅读并在http://www.updike.org/mpfr-broken.tar.gz下载
我在 FreeBSD 6 上使用 GHC 6.83,在 Mac OS X 上使用 GHC 6.8.2。请注意,您需要为库和头文件(以及那些从 GMP) 来成功编译它。
问题
为什么 C 版本可以工作,而 Haskell 版本却失败了?接近 FFI 时我还缺少什么?我尝试了 StablePtrs 并得到了完全相同的结果。
其他人可以通过编译和运行我的代码来验证这是否只是 Mac/BSD 的问题吗?(C 代码“有效”吗?Haskell 代码“无效”有效吗?)Linux 和 Windows 上的任何人都可以尝试编译/运行并查看是否得到相同的结果吗?
C代码:(works.c)
Haskell 代码:(Main.hs --- 不起作用)
c - 如何在 C -> ruby 接口中返回变量?
对先前问题的跟进,显示了当我尝试从目标库获取错误消息时失败的部分:
我希望在@msg 中返回错误消息,但是运行时我得到以下信息:
如果我使用符号 (:msg) 来代替:
显然,我遗漏了一些关于在 ruby 和 C 之间传递参数的内容。我需要什么样的 ruby 变量才能返回我的值?
haskell - 如何在结构上使用 Haskell 的 FFI?
我创建了以下用于读取图像的 C 库:
我真的找不到任何使用带有外部函数接口的数组和结构的信息。我将如何继续能够在 Haskell 中使用我的库?
我尝试使用以下示例作为基础:http ://therning.org/magnus/archives/315但随后 hsc 文件被编译为仅包含上述 c 代码的 hs 文件,仅此而已(以及当然不能编译)。
ruby - Haskell 通过 FFI 与 Ruby 绑定?
由于 ruby 和 Haskell 都支持 FFI,
- 是否可以通过 FFI 从 ruby 调用 Haskell 代码?
- Ruby 中是否有任何 Haskell 绑定?
ruby - Ruby Noobie:如何在 FFI 结构中设置字符串值
我在 Ruby 中设置 FFI 结构时遇到了一些初学者问题。我想要做的是通过在 FFI::Struct 对象中设置字符串属性来传递指向 C 字符串的指针:
但是当我运行代码时,我得到了这个错误:
所以我真的不知道从这里去哪里。
此外,如果您知道有关此主题的任何好的文档或教程,请留下回复!到目前为止,我发现关于Project Kenai的 wiki 文档 非常有用,但越多越好!
谢谢!
我试图将字符串数据成员声明为 [:char, 5] 但这给出了另一个错误:
有一个很好的建议来尝试内存指针类型,我会在今天下班后尝试。
c - Haskell FFI:调用 FunPtrs
这是我的情况:
我想调用ffmpeg的av_free_packet
函数:
但不幸的是,这个函数是static inline
,因此并没有真正出现在链接库中。
但是,它是一个非常简单的函数,我可以在 Haskell 中重新实现它。这就是我不知道该怎么做。这是部分尝试(.hsc):
现在我可以求助于在 C 中实现这个函数(通过调用原来的函数),但在我看来调用函数指针应该是可能的......
c - C:更好的方法来做 sizeof(((SomeStruct *) 0)->some_member)?
我想获取结构中特定成员的大小。
sizeof(((SomeStruct *) 0)->some_member)
对我有用,但我觉得可能有更好的方法来做到这一点。
我可以#define SIZEOF_ELEM(STRUCT, ELEM) sizeof(((STRUCT *) 0)->ELEM)
然后使用SIZEOF_ELEM(SomeStruct, some_member)
,但我想知道是否已经有更好的内置功能。
我的具体用例在 hsc2hs(Haskell C 绑定)中。
haskell - Haskell FFI:ForeignPtr 似乎没有被释放(可能是 GHC 错误?)
考虑以下代码片段
它产生以下输出:
我本来希望在..a was deleted
之后的某个地方看到“”start
我不知道发生了什么事。我有几个猜测:
- 程序结束时垃圾收集器不会收集剩余的对象
putStrLn
完成后停止工作main
。(顺便说一句,我尝试了与外国进口相同的事情puts
并得到了相同的结果)- 我的理解
ForeignPtr
不足 - GHC 错误?(环境:GHC 6.10.3,英特尔 Mac)
当使用Foreign.ForeignPtr.newForeignPtr
而不是Foreign.Concurrent.newForeignPtr
它似乎工作时:
输出: