【问题标题】:Is it possible to call from ruby to mono?是否可以从红宝石调用单声道?
【发布时间】:2009-12-19 19:04:15
【问题描述】:

我在一家中型企业工作,将中等数量的系统集成到一个用 Ruby on Rails 编写并在 Redhat 上运行的 Web 应用程序中。该应用程序的功能之一是与远程设备进行通信。有些设备我可以直接通信,有些我必须依赖设备向数据库报告。

最近,我们的一家设备制造商向我提供了一个“私有 API”,用于与我们目前无法与之通信的一些远程设备进行通信。当然,我对这种可能性很感兴趣。问题是它是作为 .NET 2.0 dll 提供的。这就是我掌握的有关界面的信息的范围。

假设我可以从单声道加载 dll(我目前对此一无所知),甚至可以从 ruby​​ 调用单声道吗?如果我可以并且这样做,我是否会陷入一个受伤的世界?

(如果性能不差的话,我愿意考虑在其他领域进行系统调用,让这个工作可以节省很多痛苦)

【问题讨论】:

    标签: .net ruby mono


    【解决方案1】:

    我认为您不能调用任何不是公开 C 调用约定接口的普通自包含库的东西。

    也就是说,在您的情况下,我会考虑做的事情(假设 .NET dll 与 mono 一起使用)是编写一个与 DLL 交互并允许您驱动 DLL 的小型 .NET/mono 可执行文件,比如说,通过命令行参数并通过标准输入读回结果(或将其写入文件,例如)。这样一来,您就可以明确区分“世界”,并且鉴于在 ruby​​ 中生成进程相当容易,这应该不会太难实现。

    【讨论】:

    • 我认为这可能是最终的解决方案。假设没有其他方式与设备交互(通过标准 TCP 协议)。我喜欢它提供的世界分离,同时操作起来仍然很简单。
    【解决方案2】:

    如果不使用 IronRuby 之类的东西,您可能无法从本机代码(Ruby 就是)访问 .NET 代码。您将不得不编写一种形式的包装器(用某种 .NET 技术编写),为您提供一种 RPC 接口形式,可能使用某种形式的 IPC 机制。

    如果您找到在 Mono 上运行 COM 对象的方法,这里还有更多信息:Can Ruby import a .NET dll?

    【讨论】:

      【解决方案3】:

      除了我非常喜欢 Timo 的建议之外,我首先要检查一下“DLL as API”在这种情况下的确切含义。那个DLL是做什么的?如果它使用一些文档齐全且简单的 TCP 协议与远程设备通信(我知道这不太可能,但可能),您可能会完全放弃 DLL 并用 Ruby 编写相同的东西。

      【讨论】:

      • 是的,弄清楚 dll 实际在做什么将是首要任务。 (实际上,弄清楚它是否在 mono 下运行。:))然后找出公司(它是一家小公司)在 ruby​​ 中提供绑定的意愿。然后执行 Timo 的建议。
      猜你喜欢
      • 1970-01-01
      • 2015-12-23
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多