我为一家中等规模的企业工作,将中等数量的系统整合到一个用Ruby on Rails编写并在Redhat上运行的Web应用程序中。该应用程序的一个功能是与远程设备通信。我可以直接与一些设备通信,有些我必须依靠报告到数据库的设备。
我最近从我们的一家设备制造商处获得了一个“私人API”,用于与我目前没有通信的一些远程设备进行通信。当然,我对这种可能性很感兴趣。问题是它是作为.NET 2.0 DLL提供的。这就是我对界面的信息范围。
假设我可以从mono(我目前一无所知)加载dll,甚至可以从ruby调用单声道?如果能做到,我是否会受到伤害?
(如果我不得不这样做,那么在其他领域我会考虑进行系统调用,这样可以节省很多痛苦,假设性能不是很恶劣)
答案 0 :(得分:3)
我认为你不能调用任何不是暴露C调用约定接口的普通自包含库。
那就是说,我会考虑在你的情况下做什么(假设.NET dll与mono工作)是写一个小的.NET / mono可执行文件,它与DLL交互并允许你驱动DLL,比如说,通过命令行参数并通过stdin读回结果(或者将其写入文件)。这样你就可以明确区分“世界”,并且假设在ruby中产生一个过程相当容易,这不应该太难实现。
答案 1 :(得分:2)
如果不使用像IronRuby这样的东西,你可能无法从本机代码(Ruby就是这样)访问.NET代码。您必须编写一种包装器(用某种.NET技术编写),它为您提供一种RPC接口,可能使用某种形式的IPC机制。
如果您找到在Mono上运行COM对象的方法,此处还有更多信息:Can Ruby import a .NET dll?
答案 2 :(得分:0)
除了我真正喜欢的Timo的建议之外,我首先会检查“DLL作为API”究竟是什么意思。这个DLL有什么作用?如果它使用一些记录良好且简单的TCP协议与远程设备进行通信(我不太可能知道,但可能),您可能完全抛弃DLL并在Ruby中编写相同的内容。