问题标签 [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.

0 投票
10 回答
25597 浏览

python - Python:SWIG 与 ctypes

在 python 中,在什么情况下 SWIG 比 ctypes 更适合调用共享库中的入口点?假设您还没有 SWIG 接口文件。

两者的性能指标是什么?

0 投票
1 回答
1602 浏览

.net - 你如何在 Mono 中进行 ALSA?

有谁知道如何在 Linux 中使用 Mono 访问 ALSA(低级音频 API)?

注意:我希望使用 PInvoke 访问 ALSA。

0 投票
3 回答
774 浏览

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 --- 不起作用)

0 投票
3 回答
554 浏览

c - 如何在 C -> ruby​​ 接口中返回变量?

对先前问题的跟进,显示了当我尝试从目标库获取错误消息时失败的部分:

我希望在@msg 中返回错误消息,但是运行时我得到以下信息:

如果我使用符号 (:msg) 来代替:

显然,我遗漏了一些关于在 ruby​​ 和 C 之间传递参数的内容。我需要什么样的 ruby​​ 变量才能返回我的值?

0 投票
3 回答
4130 浏览

haskell - 如何在结构上使用 Haskell 的 FFI?

我创建了以下用于读取图像的 C 库:

我真的找不到任何使用带有外部函数接口的数组和结构的信息。我将如何继续能够在 Haskell 中使用我的库?

我尝试使用以下示例作为基础:http ://therning.org/magnus/archives/315但随后 hsc 文件被编译为仅包含上述 c 代码的 hs 文件,仅此而已(以及当然不能编译)。

0 投票
6 回答
2800 浏览

ruby - Haskell 通过 FFI 与 Ruby 绑定?

由于 ruby​​ 和 Haskell 都支持 FFI,

  • 是否可以通过 FFI 从 ruby​​ 调用 Haskell 代码?
  • Ruby 中是否有任何 Haskell 绑定?
0 投票
2 回答
1952 浏览

ruby - Ruby Noobie:如何在 FFI 结构中设置字符串值

我在 Ruby 中设置 FFI 结构时遇到了一些初学者问题。我想要做的是通过在 FFI::Struct 对象中设置字符串属性来传递指向 C 字符串的指针:

但是当我运行代码时,我得到了这个错误:

所以我真的不知道从这里去哪里。

此外,如果您知道有关此主题的任何好的文档或教程,请留下回复!到目前为止,我发现关于Project Kenai的 wiki 文档 非常有用,但越多越好!

谢谢!

我试图将字符串数据成员声明为 [:char, 5] 但这给出了另一个错误:

有一个很好的建议来尝试内存指针类型,我会在今天下班后尝试。

0 投票
2 回答
1655 浏览

c - Haskell FFI:调用 FunPtrs

这是我的情况:

我想调用ffmpeg的av_free_packet函数:

但不幸的是,这个函数是static inline,因此并没有真正出现在链接库中。

但是,它是一个非常简单的函数,我可以在 Haskell 中重新实现它。这就是我不知道该怎么做。这是部分尝试(.hsc):

现在我可以求助于在 C 中实现这个函数(通过调用原来的函数),但在我看来调用函数指针应该是可能的......

0 投票
4 回答
472 浏览

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 绑定)中。

0 投票
1 回答
878 浏览

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它似乎工作时:

输出: