Так все-таки, может кто-нибудь привести простенький примерчик или хоть намекнуть, как выцепать информацию об интерфейсах и методах из объекта типа Object? Бе приведений типов, а просто так, по подобию извлечения необходимой информации из IDispatch? Слышал уже, что через Reflection, но поточнее можно, а?
Здравствуйте, Аноним, Вы писали:
А>Так все-таки, может кто-нибудь привести простенький примерчик или хоть намекнуть, как выцепать информацию об интерфейсах и методах из объекта типа Object? Бе приведений типов, а просто так, по подобию извлечения необходимой информации из IDispatch? Слышал уже, что через Reflection, но поточнее можно, а?
object o = GetSomeObject();
Type type = o.GetType();
MethodInfo[] methods = type.GetMethods();
foreach (MethodInfo method in methods)
object RetVal = method.Invoke(o, new object[]{ /*some arguments*/});
Re[2]: Возвращаясь к late binding
От:
Аноним
Дата:
14.12.02 10:09
Оценка:
Здравствуйте, MikaRSDN Soukhov, Вы писали:
MS>object o = GetSomeObject(); MS>Type type = o.GetType(); MS>MethodInfo[] methods = type.GetMethods();
MS>foreach (MethodInfo method in methods) MS> object RetVal = method.Invoke(o, new object[]{ /*some arguments*/});
Дык это понятно, батенька. Это я и сам нашел в доке, я думал, что я чего не догоняю. Он мне выдает все в аккурат методы, присущие System.Object. и не больше (кстати, в том числе и абстракные). Пробовал, кстати, GetInterfaces(). Результат — массив нулевой длины of System.Type.
P.S. Только не надо говорить, что мой объект интерфейсы нужные мне не поддерживает, как это однажды уже сказали. Я его в VB передаю, там все нормально. Но некрасиво уж больно писать обертку на VB.
Здравствуйте, Аноним, Вы писали:
А>Дык это понятно, батенька. Это я и сам нашел в доке, я думал, что я чего не догоняю. Он мне выдает все в аккурат методы, присущие System.Object. и не больше (кстати, в том числе и абстракные). Пробовал, кстати, GetInterfaces(). Результат — массив нулевой длины of System.Type.
все работает :
* thriving in a production environment *
Re[4]: Возвращаясь к late binding
От:
Аноним
Дата:
14.12.02 11:01
Оценка:
Здравствуйте, Igor Soukhov, Вы писали:
IS>все работает :
У меня тоже работает, если так. Предыстория: есть некое приложение (не мое), для которого делается COM-плагин. Плагин должен содержать интерфейс с методом, принимающим при запуске от приложения объект автоматизации этого самого приложения в виде IDispatch.
Дальше: пишу COM-объект на C#. Вышеупомянутый метод выглядит так:
Вот я получаю в своей бибке этот самый обьект. Его тип — АБСОЛЮТНО ГОЛЫЙ System.Object (извини за крик, но я уже целую неделю парюсь, объясняя всем это!). И нет в нем никакой инфы об актуальном типе, никакой!
Понятно, что выцепить нужную мне инфу все же можно — Васик же выцепает. Но как???
Здравствуйте, <Аноним>, Вы писали:
А>У меня тоже работает, если так. Предыстория: есть некое приложение (не мое), для которого делается COM-плагин. Плагин должен содержать интерфейс с методом, принимающим при запуске от приложения объект автоматизации этого самого приложения в виде IDispatch. А>Вот я получаю в своей бибке этот самый обьект. Его тип — АБСОЛЮТНО ГОЛЫЙ System.Object (извини за крик, но я уже целую неделю парюсь, объясняя всем это!). И нет в нем никакой инфы об актуальном типе, никакой!
А>>Вот я получаю в своей бибке этот самый обьект. Его тип — АБСОЛЮТНО ГОЛЫЙ System.Object (извини за крик, но я уже целую неделю парюсь, объясняя всем это!).
"Вынеси" все нужные тебе функции из объекта в интерфейс. А потом к ниму приводи и дергай методы.
Интерфейсы сохраняются в tlb и передаются нормально, а не как голый IDispatch
... << RSDN@Home 1.0 beta 3 >>
Re[6]: Возвращаясь к late binding
От:
Аноним
Дата:
14.12.02 11:23
Оценка:
Здравствуйте, AndrewVK, Вы писали:
AVK>Естественно, это ж ком. Ты вот это почитай
Ну прямо добрый волшебник! ЭТО я перечитывал уже раз 10. Проблем с этим нет, понимаешь? Подключаю COM-бибку, все нормально,есть нэймспейс, есть типы, управляемые уже. Могу какой хошь создать объект, как хошь могу вертеть и типы приводить. Но ЗДЕСЬ-то как быть, когда этот Object (чтоб ему неладно было) передает этот грёбаный маршалер (и ему тоже)???
Здравствуйте, <Аноним>, Вы писали:
A> Но ЗДЕСЬ-то как быть, когда этот Object (чтоб ему неладно было) передает этот грёбаный маршалер (и ему тоже)???
Повторяю: Передавай не Object, а интерфейс
... << RSDN@Home 1.0 beta 3 >>
Re[7]: Возвращаясь к late binding
От:
Аноним
Дата:
14.12.02 11:29
Оценка:
Здравствуйте, DarkGray, Вы писали:
DG>"Вынеси" все нужные тебе функции из объекта в интерфейс. А потом к ниму приводи и дергай методы.
DG>Интерфейсы сохраняются в tlb и передаются нормально, а не как голый IDispatch
Именно к интерфейсу я и пытаюсь приводить.
Есть интерфейс SomeInterface, пишу:
SomeInterface interface=(SomeInterface)obj;
Говорит, что инвалидный тайпкастинг.
Re[8]: Возвращаясь к late binding
От:
Аноним
Дата:
14.12.02 11:32
Оценка:
Здравствуйте, DarkGray, Вы писали:
DG>Повторяю: Передавай не Object, а интерфейс
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, DarkGray, Вы писали:
DG>>"Вынеси" все нужные тебе функции из объекта в интерфейс. А потом к ниму приводи и дергай методы.
DG>>Интерфейсы сохраняются в tlb и передаются нормально, а не как голый IDispatch
А>Именно к интерфейсу я и пытаюсь приводить. А>Есть интерфейс SomeInterface, пишу:
А> SomeInterface interface=(SomeInterface)obj;
А>Говорит, что инвалидный тайпкастинг.
Лучше бы код привести Но
1) Ты уверен что твой obj наследуем от SomeInterface?
2) Если он наследуем то тогда бы почему не передавать его самого (SomeInterface)?
Здравствуйте, DarkGray, Вы писали:
А>>ExternalRunCommand(...[In, MarshalAs(UnmanagedType.IDispatch)] SomeInterface kompas) ?
DG>А нужно обязательно маршалить, как IDispatch?
Ну этот самый Компас-График, который мою либку должен вызывать, заточен под то, чтобы IDispatch передавать.
Здравствуйте, <Аноним>, Вы писали:
А>Вот я получаю в своей бибке этот самый обьект. Его тип — АБСОЛЮТНО ГОЛЫЙ System.Object (извини за крик, но я уже целую неделю парюсь, объясняя всем это!). И нет в нем никакой инфы об актуальном типе, никакой!
Тебе именно нужна информация о типе? Или нужно просто повызывать методы?