2011-02-10 31 views
4

如何使用IDynamicMetaObjectProvider來內省COM對象?具體來說,給定一個任意的COM對象,我想返回一個Dictionary,其中Key是屬性名稱,Value是COM對象中屬性的字符串值(如果屬性值不是字符串,則跳過它) 。使用System.Dynamic來內省COM對象

如何在運行時獲取屬性名稱及其值?

+0

只是像你一樣使用反射,dyn.GetType()。GetProperties()等。 –

+0

@Hans這似乎並沒有工作,它只是返回ComObject靜態屬性 –

+0

在我的機器上工作得很好。確保引用是動態類型的,而不是對象。並且COM服務器實現IDispatch。 –

回答

1

你真的不能;對象不需要實現IDynamicMetaObjectProvider以提供動態功能,這是一個允許它們在綁定過程中作出貢獻的鉤子。

對於這種類型的操作,您仍然必須使用Reflection來獲取成員和值。

+0

System .__ ComObject似乎這樣做,因爲VS調試器視圖能夠將其評估爲動態對象 –

+0

也許這會增加一些額外的幫助:http://www.eggheadcafe.com/software/aspnet/30919888/introspecting-com -object-in-c.aspx –

+0

@Paul Betts:你是說你可以將'System .__ ComObject'強制轉換爲'IDynamicMetaObjectProvider'?如果是這樣,那麼爲什麼不直接在代碼中執行直接轉換?這似乎很容易做到? – casperOne