0

简单的情况,例如 printf(str, [arg1, arg2, ...])

我将如何使用 FFI 编写一个 ruby​​ 'attach_function' 调用来利用这样的函数?

我很惊讶我无法通过谷歌搜索找到这个问题的答案,但也许我使用了错误的术语。

——更新——也许我不够清楚。我已经在编写一个与 C 库接口的 RubyGem。它的工作已经很好了。我正在使用 FFI,并且一直运行良好,直到我使用可变参数列表点击此函数。

4

1 回答 1

2

在 ruby​​ 中使用 C 函数的规范方法是通过为其创建 gem 来扩展 ruby​​。没有像 Haskell 那样直接的方法。

但是,为 ruby​​ 编写 C gem 是一项相当容易的任务,几乎与在 Haskell 中使用 FFI 一样容易。你可以从 ruby​​ pickaxe 看到这个免费的章节,它教如何创建一个简单的 C gem,应该足以开始了。

编辑

如果您的问题与 varargs 和 ffi 相关,假设您使用的是ffi gem,您可以查看文档中的示例,此示例显示了如何执行此操作:

require 'ffi'

module Hello
  extend FFI::Library
  attach_function 'printf', [:string, :varargs], :int
end

3.times {  Hello.printf("cputs %s %d %x", :string, "yoyo", :int, 33, :int, 34)} # each one needs its own specifier of which type it is

如果您尝试此操作但没有成功,请让我们查看您的代码并告诉我们出了什么问题

于 2013-09-06T23:02:49.453 回答