2013-10-07 142 views
2

我不是C#程序員,所以如果這是一個愚蠢的問題,但我找不到任何解決方案。我有一個Object。這是一個COM對象,它的ToString()返回「System .__ comObject」。當用調試器檢查其內容時,我可以看到這個對象有一個名爲Object的屬性,它是我想要的實際類的一個實例。然而,Object類沒有屬性Object,當我試圖將對象本身轉換爲所需的類型時,我得到一個異常。如何將COM對象轉換爲.NET對象?將泛型COM對象強制轉換爲特定的.NET類

+0

你不能,你最好能do將其轉換爲與對象實現的其中一個COM接口相匹配的接口 – Mgetz

+0

@Mgetz:如何找到它實現的接口? –

+0

您的問題似乎表明您有權訪問本機代碼,如果是這種情況,您可以查看本機聲明的對象。但是,如果你能,我會強烈建議使用[Tlbimp創建一個.NET庫來爲你做互操作。](http://msdn.microsoft.com/en-us/library/z6tx9dw3.aspx) – Mgetz

回答

3

如果你知道你想要什麼類型它是,你可以建立一個方法,它自己進行轉換,使用dynamic訪問屬性:

public static MyObject ConvertFromComObject(dynamic comObject) 
{ 
    return comObject.Object; 
} 
// or, if that doesn't work: 
public static MyObject ConvertFromComObject(dynamic comObject) 
{ 
    return new MyObject { MyProperty = comObject.Object.MyProperty }; 
} 
// or maybe 
public static MyObject ConvertFromComObject(dynamic comObject) 
{ 
    return new MyObject { MyProperty = comObject.MyProperty }; 
} 
+0

這工作,非常感謝!我可以在沒有獨立方法的情況下使其在線工作嗎? –

+0

@VioletGiraffe當然可以。只需投射到「動態」,例如'MyObject myObj =((dynamic)comObject).Object;',或從頭開始將'comObject'聲明爲'dynamic':'dynamic comObject = SomeCom.GetObject(); comObject.Object.DoSomething();'。 –

相關問題