[英]Calling a C# .dll from Ruby via COM
我試圖在我的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接口”錯誤。 有趣的是,如果我從C#返回一個數組,則.each可以在該對象上工作。
我什至會以正確的方式這樣做嗎?
謝謝
盡管HashTable
是ComVisible的,但它不會通過COM封送處理從C#集合神奇地轉換為Ruby集合。
我不了解任何Ruby,因此無法舉個例子,但是您可能需要調用HashTable.GetEnumerator
並使用IEnumVARIANT
返回的IEnumVARIANT
在Ruby中遍歷HashTable
。
嘗試閱讀http://msdn.microsoft.com/en-us/library/ee817653.aspx
您必須點擊鏈接以找到可進行托管到COM數據類型轉換的頁面
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.