问题标签 [ruby-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 投票
1 回答
31 浏览

c - 使用 RubyFFI 从 ruby​​ 停止具有无限循环的 ac 函数

以下是我的场景,

    1. 我使用 Ruby FFI 从 Ruby 调用名为“subscribe”的 ac 函数
    2. 子函数在while循环中无限运行
    3. 我需要一种方法来停止从 Ruby 订阅此订阅(需要停止无限运行的 c 函数)

红宝石

c程序

有什么想法吗?有没有更好的方法来管理这个?

0 投票
1 回答
633 浏览

ruby - 从 Ruby 使用 Aerospike 时出现 GENERAL_NAME_free 错误

我正在尝试创建一个简单的共享库libfoo.so,它使用单个函数打开与 Aerospike 服务器的连接,等待 3 秒并关闭连接。libfoo.so有一个单一的功能open_then_close(char* host, int port)

然后我想使用 FFI 从 Ruby 调用这个函数:

foolib.so用C程序测试过,效果很好。但是,当我尝试运行上述代码时,出现以下错误:

附加信息:

知道有什么问题吗?

更新

这就是我编译和创建的方式libfoo.so

链接错误的方式:

0 投票
0 回答
158 浏览

ruby - 为什么我的 Fiddle 结构被垃圾填满?

我正在尝试使用 Fiddle 将一个非常简单的 C Win32 API 调用转换为 Ruby,但并没有取得太大的成功。

前两个方法调用完美无缺,但是当我进行填充结构的调用时,我遇到了一些困难,因为看起来结构正在填充垃圾数据:

这是相关的C代码:

这是我将 C 转换为 Ruby 的尝试:

不幸的是,pFileInfo.dwSignature似乎每次都在变化,表明它被垃圾数据填充(奇怪的是它在VerQueryValue调用之前为零)。该pFileInfo.dwSignature值应始终为0xFEEF04BD或 十进制4277077181

对这里发生的事情有任何想法吗?

谢谢!

0 投票
1 回答
363 浏览

c - Ruby/FFI:字符串未到达 *char 函数参数

我正在尝试使用 FFI 实现Darknet 库中的一些功能:

似乎文件名字符串没有通过:

这是函数声明

我对 FFI 很陌生,但我已经成功地实现了其他功能,没有任何问题。如果有人可以给我指点(不是双关语),我一定会遗漏一些明显的东西......

0 投票
1 回答
92 浏览

vb.net - 如何识别为什么 Ruby-FFI 和 VB.net 无法加载 dll 文件?

我有一个文件,其中包含我需要使用的四个功能。DLL 函数文档在这里。我尝试Lib在 VB.net 和ffi_libRuby-FFI 中加载 DLL。两者都给我加载 DLL 的错误,但我无法使用任何东西来弄清楚为什么它不能加载 DLL。如何确定 FFI(我的首选访问方法,但我也接受 VB.net)无法加载 DLL 的原因?我在 Windows 和 Mac 上都试过了。

DLL 文件可在此处获得,或者通过在此处http://www.mscashdrawer.com/techcashdrawerUSB.php的支持页面上安装编号 5 的文件来获得。这将创建一个包含 DLL 文件的 C:\Program Files\MS Cash Drawer 目录。

mac 上的 Ruby-FFI 说

更新:我认为可能是因为 dll 是 32 位的。以下是来自 dumpbin 的标头

0 投票
1 回答
74 浏览

ruby - 为 Ruby FFI::Struct 定义一个初始化方法?

目前,我有一个 RUby FFI 结构:

需要像他一样创建:

我可以initialize在 Struct 上定义一个方法,以便我可以这样做:

我已经尝试了以下确实有效的方法,但它会以某种方式咬我吗?

0 投票
1 回答
92 浏览

ruby - Ruby Fiddle - 重新加载动态库

我正在使用Fiddle从用 C 编写的动态库中加载函数。在开发过程中,我需要对库进行更改并重新加载以进行测试。问题是dlload除非我重新启动脚本,否则不会重新加载库。我正在为 SketchUp 开发一个 Ruby 插件,因此“重新启动”脚本实际上意味着重新启动应用程序。

显示问题的示例代码:

如果您第一次启动脚本,则没有错误。如果您第二次启动它,您会收到错误:image not found,如预期的那样。

因此,在执行过程中,似乎只导入了一次库。关于如何强制Fiddle重新加载库的任何建议?

我正在使用macosRuby 2.0

0 投票
1 回答
952 浏览

ruby - 如何使用 Ruby fiddle 加载 Windows DLL 文件?

我正在尝试为 ruby​​ 创建一个GR 框架绑定。我用小提琴。Fiddle 是使用 ruby​​ 翻译外部函数接口 (FFI) 的默认扩展。它在 Linux 和 Mac 上运行良好。但在 Windows 上,我收到以下错误。

代码hoge.rb

错误

  • 视窗 10
  • Ruby 2.6.5 + 开发工具包

ruby-ffi 效果很好。

但这次我想用 fiddle 代替 ruby​​-ffi。接下来我该怎么办?

0 投票
1 回答
251 浏览

c - Ruby Fiddle - 函数在 C 和 Ruby 之间的行为不同

我正在使用Ruby Fiddle访问 C 函数来执行一些繁重的计算。C 函数在直接调用时工作得非常好,但是当通过Fiddle它使用时,它会以不可预知的方式返回多行nans 和infs。该函数对作为指向数组的指针传递的矩阵进行操作。

我已经调试了 C 代码,一切正常。我还将传递给 C 函数的各种参数保存到文件中,以确保 Fiddle 没有传递一些奇怪的值,但没有明显的(至少对我而言)问题。

此外,对于“较小”的矩阵,这似乎不会发生。提前为代码很长道歉,但这是准确重现它正在发生的事情的唯一方法。用于测试的数据在文件中。(要点)。您只需将 Ruby 和 C 测试数据复制并粘贴到下面的代码中即可。

如果有帮助,我正在研究 macos Catalina 和 Ruby 2.2.4(要求)。

C代码如下:

我编译的是clang -g --extra-warnings utils.c -o utils.

Ruby代码如下

如果你想测试它,首先启动./utils. 它将在本地文件夹中保存一些文件。看看MRT_MAT.txt

现在启动 ruby​​ 代码几次。它将生成相同的文件,但您会注意到“通常”该文件将包含带有 nan 和 inf 的随机行。相同的数据返回给 Ruby 并保存在MRT_MAT_RUBY.txt本地目录的文件中。

我对 Ruby 很熟悉,但 C 并不是我的强项。从Ruby调用时能够调试C代码会很棒,但我真的不知道该怎么做。

0 投票
0 回答
61 浏览

ruby - 如何通过 FFI 将具有字符串字段的结构传递给本机库,该结构的预初始化字符串字段?

我有通过 FFI gem 将结构传递给本机 Rust 库的 ruby​​ 代码。

结构包含一个字符串字段。我需要能够在 Ruby 端指定字符串。

我试过这个:

并得到了这个:

这会导致分段错误:

我已经阅读了有关此问题的信息,但没有找到明确的解决方案,也没有找到示例。我需要能够至少从 Ruby传递一个字符串字段 (一种方式,即)。

此外,还将本机 Rust 库接收的字符串(不是 NULL 终止,但在单独的字段中指定长度)转换为 Ruby 字符串。

那怎么办呢?