我正在尝试在 Ruby 代码中调用 C# 中的一些方法。首先,我在 Visual Studio 2008 中创建一个 .dll。我在构建时注册 COM 互操作。
为了测试这个新过程,我用 C# 创建了一个简单的 DivideTwo 小方法 -
public double DivideTwo(double a, double b)
{
return a / b;
}
在 Ruby 中,我执行以下操作:
require 'win32ole'
test=WIN32OLE.new('DllAttempt.CsharpDll')
x=test.DivideTwo(5,5)
puts x
#x=1
我很兴奋,因为我想我已经成功了!我决定接下来通过以下方法从 C# 返回哈希值:
public Hashtable Hashtbl(string a,int b)
{
Hashtable bbDataHash = new Hashtable();
bbDataHash.Add(a, b);
return (Hashtable)bbDataHash;
}
在 Ruby 中,我执行以下操作:
require 'win32ole'
test=WIN32OLE.new('DllAttempt.CsharpDll')
x=test.Hashtbl("key",1)
puts x
#x=#<WIN32OLE:0x283f3f4>
正如您所看到的,我返回了一个 COM 对象。我无法从该对象中获取任何内容。 x.each {block} 给我一个“无法获取 IEnum Interface”错误。有趣的是,如果我从 C# 返回一个数组,.each 将作用于该对象。
我是否以正确的方式处理这件事?
Thanks