簡體   English   中英

通過COM從Ruby調用C#.dll

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM