Как использовать System.Reflection для объектов COM
От: x1 http://www.agpage.ru
Дата: 22.01.07 08:03
Оценка:
Надо узнать есть ли свойство у объекта COM.
Через IDispatch можно, например, из JScript получить свойство MyProperty у объекта так:
MyObject.GetProperty("MyProperty").
Reference на COM-объект добавлен в проект, и автоматически сгенерированы обёртка.
В .NET для позднего связывания, как я понял, используется рефлексия. Но как этим воспользоваться?

Сейчас для работы с объектом используется такой код:

object o = Doc.GetItem(i);
IteropMyLibrary.MyObject MyO = o as IteropMyLibrary.MyObject;
if (MyO.Property != null)
 //...


P.S. Может кто-нибудь посоветует книжку, где хорошо описана рефлексия.
Re: Как использовать System.Reflection для объектов COM
От: _FRED_ Россия
Дата: 22.01.07 09:08
Оценка:
Здравствуйте, x1, Вы писали:

x1>Сейчас для работы с объектом используется такой код:

x1>object o = Doc.GetItem(i);
x1>IteropMyLibrary.MyObject MyO = o as IteropMyLibrary.MyObject;
x1>if (MyO.Property != null)
x1> //...

А что именно здесь не устраивает?
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Как использовать System.Reflection для объектов COM
От: x1 http://www.agpage.ru
Дата: 22.01.07 09:32
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>
x1>>object o = Doc.GetItem(i);
x1>>IteropMyLibrary.MyObject MyO = o as IteropMyLibrary.MyObject;
x1>>if (MyO.Property != null)
x1>> //...
_FR>

_FR>А что именно здесь не устраивает?

В этом коде меня всё устараивает, но в реальном проекте есть несколько (около 10)
объектов разных типов, имеющих некоторое свойство, чтобы не писать каждый раз


IteropMyLibrary.MyObject1 MyO1 = o as IteropMyLibrary.MyObject1;
if (MyO1 != null)
  MyO1.MyPoperty; 
else {
 IteropMyLibrary.MyObject2 MyO2 = o as IteropMyLibrary.MyObject2;
 if (MyO2 != null)
  MyO2.MyPoperty;
 else{
  // и так далее для MyObject3, MyObject4, MyObject5
 }
}


Хотелось бы что-нибудь вроде:


 if (o.GetProperty("MyProperty")
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.