3
互操作調用後,我找回一個COM對象。 我知道這個對象將是三個可能的COM類(Class1,Class2,Class3)之一,但不知道在運行時是哪一個。在COM互操作中使用反射
該對象的反射(interopObject.GetType())返回System .__ ComObject的基本RCW包裝。
我需要的是在對象上設置一些屬性 - Text1,Text2,... Text30(實際名稱,btw :)),它們存在於所有三個類中。因此,問題是,我可以以某種方式獲得對象的運行時類型(這可以解決我的問題,但可能不可能,因爲.net運行時可能沒有該信息),或者我可以設置屬性COM對象的盲目
這是我當前的代碼,這將失敗:
for (int i = 1; i <= 30; i++)
{
ProprertyInfo pi =interopObject.GetType().GetProperty("Text" +i.ToString())
// this returns null for pi
pi.GetSetMethod().Invoke(interopObject, new object[] { someValue });
}
感謝馬克,這三個走在我的永久收藏的噱頭:
private static object LateGetValue(object obj, string propertyName)
{
return RuntimeHelpers.GetObjectValue(NewLateBinding.LateGet(obj, null,
propertyName, new object[0], null, null, null));
}
private static void LateSetValue(object obj, string propertyName, object value)
{
NewLateBinding.LateSet(obj, null, propertyName, new []{value}, null, null);
}
private static void LateCallMethod(object obj, string methodName)
{
NewLateBinding.LateCall(obj, null, methodName, new object[0], null,
null, null, true);
}
Unfortunalely,代碼明天到期,在秋/冬無有時:) 並且還,VB是不是一種選擇。 是的,我確實需要用一種不支持它的語言進行鴨子打字...... – SWeko 2009-07-21 20:57:14