我想从C#中的Ruby代码中调用几个方法。首先,我在Visual Studio 2008中创建了一个.dll。我在构建时注册了COM interop。从Ruby通过COM调用C#.dll
为了测试这个新的过程中,我创建了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接口”的错误。有趣的是,如果我从C#返回一个数组,那么每个对象都可以工作。
我是否会以正确的方式去做这件事?
感谢
编辑的页面,以反映事实的GetEnumerator可能返回一个IEnumVARIANT代替一个IDictionaryEnumerator。 – imasloen
也许你可以返回一个JSON序列化的HashTable字符串,然后直接反序列化成一个Ruby对象。 – ProfNimrod