RubyコードでC#からいくつかのメソッドを呼び出そうとしています。まず、VisualStudio2008で.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インターフェイスの取得に失敗しました」というエラーを表示します。興味深いことに、C#から配列を返すと、.eachはそのオブジェクトで機能します。
私もこれを正しい方法で行っていますか?
ありがとう