2009-12-19 28 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