2009-12-19 79 views
3

我工作的是一个中等规模的业务,将一定数量的系统集成到一个用Ruby on Rails编写并在Redhat上运行的Web应用程序。应用程序的功能之一是与远程设备进行通信。有些设备可以直接与我沟通,有些我必须依靠设备向数据库报告。可以从ruby调用单声道吗?

我最近从我们的一个设备制造商那里提供了一个“私人API”,以便与我目前没有通信的一些远程设备进行通信。当然,我对这种可能性感兴趣。问题在于它是以.NET 2.0 DLL的形式提供的。这是关于界面的信息的范围。

假设我可以从单声道加载dll(目前我一无所知),甚至可以从ruby调用单声道?如果我能够做到,我会受到伤害的世界吗?

(得到这个工作将节省,我愿意考虑做,如果我要系统调用其他地区那么多的痛苦,假设表现并不残暴)

回答

3

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

这就是说,我会考虑在你的情况下做的(假设.NET dll与mono一起工作)是编写一个与DLL交互的小型.NET/mono可执行文件,它允许你驱动DLL,比如说,通过命令行参数并通过stdin读取结果(例如,将其写入文件)。这样你就可以清楚地区分'世界',并且鉴于在红宝石中产生一个过程相当容易,这不应该太难实现。

+0

我认为这可能是最终的解决方案。假设没有其他方式与设备连接(通过标准的TCP协议)。我喜欢它提供的世界的分离,但仍然很简单。 – 2009-12-19 17:34:21

2

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

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

0

除了蒂莫的建议,我真的很喜欢,我会先检查什么“DLL的API”的意思在这种情况下。那个DLL做什么?如果它使用一些记录良好且简单的TCP协议与远程设备进行通信(不太可能,我知道,但可能),那么您可能完全抛弃DLL并在Ruby中编写相同的东西。

+0

是的,搞清楚dll实际上在做什么将成为业务的第一顺序。 (事实上​​,弄清楚它是否在单声道下运行)。)然后找出公司是多么愿意(这是一家小公司)提供红宝石绑定。然后执行Timo的建议。 – 2009-12-19 17:36:28