问题标签 [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.
c - 使用 RubyFFI 从 ruby 停止具有无限循环的 ac 函数
以下是我的场景,
- 我使用 Ruby FFI 从 Ruby 调用名为“subscribe”的 ac 函数
- 子函数在while循环中无限运行
- 我需要一种方法来停止从 Ruby 订阅此订阅(需要停止无限运行的 c 函数)
红宝石
c程序
有什么想法吗?有没有更好的方法来管理这个?
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
链接错误的方式:
ruby - 为什么我的 Fiddle 结构被垃圾填满?
我正在尝试使用 Fiddle 将一个非常简单的 C Win32 API 调用转换为 Ruby,但并没有取得太大的成功。
前两个方法调用完美无缺,但是当我进行填充结构的调用时,我遇到了一些困难,因为看起来结构正在填充垃圾数据:
这是相关的C代码:
这是我将 C 转换为 Ruby 的尝试:
不幸的是,pFileInfo.dwSignature
似乎每次都在变化,表明它被垃圾数据填充(奇怪的是它在VerQueryValue
调用之前为零)。该pFileInfo.dwSignature
值应始终为0xFEEF04BD
或 十进制4277077181
。
对这里发生的事情有任何想法吗?
谢谢!
vb.net - 如何识别为什么 Ruby-FFI 和 VB.net 无法加载 dll 文件?
我有一个文件,其中包含我需要使用的四个功能。DLL 函数文档在这里。我尝试Lib
在 VB.net 和ffi_lib
Ruby-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 的标头
ruby - 为 Ruby FFI::Struct 定义一个初始化方法?
目前,我有一个 RUby FFI 结构:
需要像他一样创建:
我可以initialize
在 Struct 上定义一个方法,以便我可以这样做:
我已经尝试了以下确实有效的方法,但它会以某种方式咬我吗?
ruby - Ruby Fiddle - 重新加载动态库
我正在使用Fiddle
从用 C 编写的动态库中加载函数。在开发过程中,我需要对库进行更改并重新加载以进行测试。问题是dlload
除非我重新启动脚本,否则不会重新加载库。我正在为 SketchUp 开发一个 Ruby 插件,因此“重新启动”脚本实际上意味着重新启动应用程序。
显示问题的示例代码:
如果您第一次启动脚本,则没有错误。如果您第二次启动它,您会收到错误:image not found
,如预期的那样。
因此,在执行过程中,似乎只导入了一次库。关于如何强制Fiddle
重新加载库的任何建议?
我正在使用macos
和Ruby 2.0
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。接下来我该怎么办?
c - Ruby Fiddle - 函数在 C 和 Ruby 之间的行为不同
我正在使用Ruby Fiddle
访问 C 函数来执行一些繁重的计算。C 函数在直接调用时工作得非常好,但是当通过Fiddle
它使用时,它会以不可预知的方式返回多行nan
s 和inf
s。该函数对作为指向数组的指针传递的矩阵进行操作。
我已经调试了 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代码会很棒,但我真的不知道该怎么做。
ruby - 如何通过 FFI 将具有字符串字段的结构传递给本机库,该结构的预初始化字符串字段?
我有通过 FFI gem 将结构传递给本机 Rust 库的 ruby 代码。
结构包含一个字符串字段。我需要能够在 Ruby 端指定字符串。
我试过这个:
并得到了这个:
这会导致分段错误:
我已经阅读了有关此问题的信息,但没有找到明确的解决方案,也没有找到示例。我需要能够至少从 Ruby传递一个字符串字段 (一种方式,即)。
此外,还将从本机 Rust 库接收的字符串(不是 NULL 终止,但在单独的字段中指定长度)转换为 Ruby 字符串。
那怎么办呢?