public int Set(int newValue,Object obj)
{
//System.Windows.Forms.Control ctrl = (System.Windows.FormsControl)Object;
}
这里的对象是COM对象。现在我想将它转换为.NET对象并获取其属性。最简单的方法是什么?
答案 0 :(得分:0)
您无法直接将COM对象转换为Windows.Forms.Control对象。它不是那种特定的类型。
如果使用正确的类型库,COM对象应该为您提供自己的属性。如果将其转换为适当的类型,则应该能够直接使用其属性。
答案 1 :(得分:0)
有问题的对象是COM对象的事实不是问题。您不必将其转换为.NET对象,因为它已经是一个。您将获得此对象上的属性,就像您没有类型信息的任何其他.NET对象一样,例如:
var objectType = obj.GetType();
foreach(var prop in objectType.GetProperties())
{
Console.WriteLine("Property {0} of type {1}",
prop.Name, prop.PropertyType.Name);
}
要调用属性,可以使用Type类的InvokeMember方法。以下是如何将对象上的“可见”属性(如果存在)设置为true
:
objectType.InvokeMember("Visible", BindingFlags.SetProperty,
null, obj, new object[] { true });
如果您使用的是.NET 4或4.5,则可以使用dynamic关键字更轻松地使用COM源.NET对象:
var xlAppType = Type.GetTypeFromProgID("Excel.Application");
dynamic xlApp = Activator.CreateInstance(xlAppType);
xlApp.Visible = true;
请注意,在最后一个示例中,Visible属性的调用是如何免于咒语的。我尝试尽可能使用动态来处理COM对象。