问题标签 [rubydl]
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 - 你如何使用 Ruby/DL?这是正确的吗?
我正在尝试编写 RSPEC(ruby 风格的 BDD)和 Windows 应用程序之间的接口。应用程序本身是用一种晦涩难懂的语言编写的,但它有一个 C API 来提供访问权限。我已经使用 Ruby/DL,但即使是最基本的 DLL 方法调用也很难工作。这是我目前在一个名为 gt4r.rb 的文件中所拥有的:
到目前为止,我的阅读表明这就是我所需要的,所以我写了一个 RSPEC 示例:
而运行时...
返回值 (13) 是一个实际的返回代码,表示错误,但是当我尝试将 gTD_get_error_message 调用添加到我的 RSPEC 时,我无法让参数正常工作。
我是否朝着正确的方向前进,任何人都可以指出我可以尝试的下一件事吗?
谢谢,布雷特
对此问题的跟进,显示了当我尝试从目标库中获取错误消息时失败的部分:
我希望在@msg 中返回错误消息,但是运行时我得到以下信息:
如果我使用符号 (:msg) 来代替:
显然我错过了一些关于在 ruby 和 C 之间传递参数的东西,但是什么?
c - 如何在 C -> ruby 接口中返回变量?
对先前问题的跟进,显示了当我尝试从目标库获取错误消息时失败的部分:
我希望在@msg 中返回错误消息,但是运行时我得到以下信息:
如果我使用符号 (:msg) 来代替:
显然,我遗漏了一些关于在 ruby 和 C 之间传递参数的内容。我需要什么样的 ruby 变量才能返回我的值?
c - 如何编写通用 C 函数来调用 Win32 函数?
为了允许从脚本语言(用 C 编写)访问 Win32 API,我想编写如下函数:
通常,它将调用任何 Win32 API 函数。
(LPSTR 参数本质上被用作字节数组 - 假设它们的大小已经正确,可以在函数外部采用正确的数据类型。另外我相信需要一些额外的复杂性来区分指针和非指针参数,但我出于这个问题的目的,我忽略了这一点)。
我遇到的问题是将参数传递给 Win32 API 函数。因为这些是标准调用,我不能使用可变参数,所以“调用”的实现必须提前知道参数的数量,因此它不能是通用的......
我想我可以用汇编代码来做到这一点(通过循环参数,将每个参数推入堆栈),但这在纯 C 中可能吗?
更新:我现在已将“不,不可能”的答案标记为已接受。如果基于 C 的解决方案出现,我当然会改变这一点。
更新: ruby/dl看起来可以使用合适的机制来实现。对此的任何细节将不胜感激。
c - 我熟悉 Ruby /DL,但不确定如何使用具有返回参数指针的 C 函数调用
我在这个模块中有这个功能
如何在模块中进行设置以访问指针?
里面有我需要的部分吗?我只是不确定。这是如何正确完成的?确切的代码在http://www.iausofa.org/2013_1202_C/sofa/cal2jd.c 我需要知道如何访问这些地址指针。验证测试在这里http://www.iasofa.org/2013_1202_C/sofa/t_sofa_c.c
一个几乎等效的 main C 看起来像下面的代码。我刚刚制作了 cal2jd.c 文件的副本,并将 main 函数添加到它的底部。
我用 > gcc -o cal2jd cal2jd.c 编译它
这是我的输出
状态良好,djm0 由头文件 sofam.h 中的常量设置为 2400000.5,您可以从源文件中的注释中看到它应该始终如此。您可以从验证测试文件中看到 djm 应该是什么。
我试图一次做太多事情。我在使用 SOFA 代码并尝试将其包装在 Ruby 中时正在学习一些 C 代码。(实际上是 JRuby)所以我会回答 C 部分、DL 或 FFI 或一些好的参考链接。
我也在考虑 ffi 方法。这是一个开始。
我真的在 JRuby 中尝试过这个。因为我迷路了,我该从哪里开始。请问我可以举一些好的例子吗?提前致谢。
ruby - 通过 Ruby/DL 调用 OpenProcessToken 时的段错误
请看下面的更新
我一直在尝试修复 Ruby 库跨 UAC 上下文与另一个程序通信的能力,并且需要创建一个与当前用户具有相同安全属性的共享文件映射。我正在使用 Ruby/dl 并试图让它在 Ruby 1.9.3 上工作是导致我的问题的原因。
在 advapi31 中调用OpenProcessToken函数会导致分段错误。您将在下面找到一个最小示例,它导致我的机器出现分段错误。我收到的错误文本在这里,这里也是错误文本打印到命令行后出现的错误框的屏幕截图:
更新
将 Ruby 更新到 1.9.3p545(使用 RubyInstaller)允许我运行上面提供的示例,但我仍然遇到问题。我在这里创建了一个包含文件的要点,这些文件在使用 1.9.3p545 运行时会产生分段错误(尽管这次没有解释器变得无响应并产生上述对话框。)我已经在我的机器以及另一台安装相同版本 Ruby 的机器,结果相同。由于我之前没有提到它,我正在运行 Windows 7 Pro 64 位,我测试它的另一台计算机也是如此。
我注意到一些可能暗示更深层次的问题的事情,不一定与 OpenProcessToken 相关。以下任何一项都可以单独防止段错误:
- 将 runner.rb 中的第 3 行复制到 mwe.rb 的底部并直接运行 mwe.rb。
- 注释掉 mwe.rb 的第 5 行或注释掉一些较大的 errors.rb 子集(例如注释掉第 37 到 99 行不会导致段错误)。
- 注释掉 runner.rb 的第 3 行,实际上只需要其他文件并退出。
- 从 Pageant::Win 中注释掉以下组合不会导致段错误:
- 来电
extern
- 来电
struct
- 常数
- 类方法
- 来电
在最后一种情况下,不需要注释掉特定类别的所有项目。例如,如果我注释掉TOKEN_USER
和SECURITY_ATTRIBUTES
. 我还可以通过注释掉TOKEN_USER
和extern
关联的语句来防止段错误IsValidSecurityDescriptor
。我尝试了其他几种导致相同行为的组合。
任何帮助,将不胜感激。
ruby - 带有 DL::Importer 的未定义方法
调试器指出方法消息未定义是因为它嵌套在 C 中,如果是,我该如何更改
c - 没有声音。通过 RubyDL 使用 Ruby 和 winmm
预期行为:中间 C 在一个 midi 乐器上演奏,然后是另一个。实际行为:DL 弃用警告并且没有声音。运行 Windows 7。
编码:
摘自《实用 Ruby 项目》一书。根据第 2 章 11-15 页上的数字。代码稍作修改以处理 Ruby 1.9 中对 Ruby DL 的更改。