2009-12-01 87 views
3

如何在ruby中調用C#dll?如何在ruby中調用C#dll?

+0

聽起來像一個笨蛋http://stackoverflow.com/questions/1025086/how-do-i-call-windows-dll-functions-from-ruby – 2009-12-01 03:23:26

+2

不是一個愚蠢的問題(至少引用的問題) - 這是關於調用非託管代碼,這是關於託管的。 – 2009-12-01 08:23:40

回答

3

我能想到的幾種可能性:

  • 寫(或找人寫的)一個COM包裝爲您的DLL,如果它不已經有一個,然後使用Ruby的WIN32OLE庫來調用它;
  • 看看RubyCLR,其中一位作者是John Lam,他繼續在微軟的IronRuby工作。 (我認爲它不再被維護,它可能不支持2.0以上的.Net版本);
  • 正如其他地方已經提到的那樣,請看使用IronRuby,如果這是您的技術選項。

關於主題here有個帖子。需要注意的是,過去後實際上是從約翰·林(貌似是2009年3月),他似乎舒服聲稱RubyCLR還是功能...

1

你也可以寫一本機 - > C#包裝DLL使用託管C++

將你想要的所有函數導出爲DLL中的C調用,例如

extern "C" __declspec (dllexport) void CallManagedMethod() { 
    Something^ myManagedObject ... 
} 

然後使用FFI調用該DLL從紅寶石 https://github.com/ffi/ffi

1

可以使用非託管的出口(https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports) 建立在C#中的非託管的條目。 例如,您可以創建一個init_youmodulename,這是ruby擴展所必需的。 然後,您可以使用require'youmodulename'以ruby加載它。

此鏈接(https://bitbucket.org/icehuli/sucsexttutorial)有幾個例子。雖然它的目標是Sketchup的ruby擴展,但是學習它的工作原理可能仍然很有趣。