使用FFI将Attach_function连接到带有可变参数列表的C函数?

时间:2013-09-06 22:44:38

标签: ruby ffi

简单的例子,比如printf(str,[arg1,arg2,...])

如何使用FFI编写ruby'adtt_function'调用来使用这样的函数?

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

- 更新 - 也许我不够清楚。我已经在编写一个与C库接口的RubyGem。它的工作已经很好了。我正在使用FFI并且一直很顺利,直到我用可变参数列表命中这个函数。

1 个答案:

答案 0 :(得分:2)

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

但是,为ruby编写C gem是一项相当容易的任务,几乎和在Haskell中使用FFI一样简单。您可以看到this free chapter from ruby pickaxe教授如何创建一个简单的C gem,并且应该足够开始。

修改

如果您的问题与varargs和ffi有关,假设您使用的是ffi gem,则可以查看the examples on documentation,此示例说明了如何执行此操作:

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

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