簡體   English   中英

將COM對象轉換為.Net對象

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

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