2009-12-01 89 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扩展,但是学习它的工作原理可能仍然很有趣。