简单的例子,比如printf(str,[arg1,arg2,...])
如何使用FFI编写ruby'adtt_function'调用来使用这样的函数?
我很惊讶我通过谷歌搜索找不到这个问题,但也许我使用了错误的术语。
- 更新 - 也许我不够清楚。我已经在编写一个与C库接口的RubyGem。它的工作已经很好了。我正在使用FFI并且一直很顺利,直到我用可变参数列表命中这个函数。
答案 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
如果您尝试此操作但无效,请让我们查看您的代码并告诉我们出了什么问题