Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用FFI将_函数附加到具有可变参数列表的C函数?_Ruby_Ffi - Fatal编程技术网

Ruby 使用FFI将_函数附加到具有可变参数列表的C函数?

Ruby 使用FFI将_函数附加到具有可变参数列表的C函数?,ruby,ffi,Ruby,Ffi,简单的例子,类似printf(str,[arg1,arg2,…) 我如何使用FFI编写ruby“attach_function”调用来利用这样的函数 我很惊讶,我在谷歌上找不到这个问题的答案,但也许我使用了错误的术语 --更新-- 也许我还不够清楚。我已经在编写一个与C库接口的RuuGeMe了。它已经可以正常工作了。我使用的是FFI,一直都很好,直到我用一个变量参数列表找到这个函数。在ruby中使用C函数的标准方法是通过为它创建一个gem来扩展ruby。没有像Haskell那样直接的方法 然而,

简单的例子,类似printf(str,[arg1,arg2,…)

我如何使用FFI编写ruby“attach_function”调用来利用这样的函数

我很惊讶,我在谷歌上找不到这个问题的答案,但也许我使用了错误的术语

--更新--
也许我还不够清楚。我已经在编写一个与C库接口的RuuGeMe了。它已经可以正常工作了。我使用的是FFI,一直都很好,直到我用一个变量参数列表找到这个函数。

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

然而,为ruby编写C gem是一项相当简单的任务,几乎和在Haskell中使用FFI一样简单。您可以看到,这教会了如何创建一个简单的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

如果您尝试了这个方法但没有成功,让我们看看您的代码并告诉我们出了什么问题

我特别提到了Ruby的FFI。@BadQuanta My bad,修复了答案。然而,如果你已经在写宝石了,我只会回答你的好奇心。非常感谢你,这就是我需要的答案。我一直在谷歌上搜索“FFI Ruby变量参数”,但完全忽略了文档的这一部分。@BadQuanta很乐意帮忙。看起来很奇怪,这些函数被称为
variadic
或简单地称为
varargs
——这可能会帮助你在下一个google中使用。这个示例代码在这里不起作用。有一个错误:
LoadError:no library specified
但是,我只是通过
ffi_lib'C'
Hello
模块中包含了默认的C库,之后,代码在这里工作正常。很好。