将泛型COM对象强制转换为特定的.NET类

问题描述:

我不是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

如果你知道你想要什么类型它是,你可以建立一个方法,它自己进行转换,使用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();'。 –