[英]Convert COM object to .Net Object
public int Set(int newValue,Object obj)
{
//System.Windows.Forms.Control ctrl = (System.Windows.FormsControl)Object;
}
這里的對象是COM對象。 現在,我想將其轉換為.NET對象並掌握其屬性。 最簡單的方法是什么?
所討論的對象是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對象。
您不能將COM對象直接轉換為Windows.Forms.Control對象。 不是那個特定的類型。
如果使用正確的類型庫,則COM對象應為您提供其自身的屬性。 如果將其強制轉換為適當的類型,則應該可以直接使用其屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.