Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Алексей В. Бастриков
Зарегистрирован: 02.06.2008 Сообщения: 118 Откуда: ООО "Инфопроект", г. Екатеринбург
|
Добавлено: Вт 30 Авг 2011 13:17 Заголовок сообщения: Script.Disp |
|
|
Что за странный объект Script.Disp?
public void Start(object disp)
{
IngeoApplication app = disp.GetType().InvokeMember("Application", BindingFlags.GetProperty, Type.DefaultBinder, disp, null) as IngeoApplication;
возвращает реальный указатель на приложение ИнГЕО
foreach (MemberInfo member in app.GetType().GetMembers())
{
MessageBox.Show(member.Name);
}
среди member-ов Application-а и других свойств и методов из программного модуля не находится |
|
Вернуться к началу |
|
 |
APopov
Зарегистрирован: 19.06.2006 Сообщения: 347 Откуда: Самара
|
Добавлено: Вт 30 Авг 2011 13:50 Заголовок сообщения: |
|
|
а этот код к чему относится и где запускается? _________________ ОАО "Самара-Информспутник",
инженер-программист Попов Артем |
|
Вернуться к началу |
|
 |
Алексей В. Бастриков
Зарегистрирован: 02.06.2008 Сообщения: 118 Откуда: ООО "Инфопроект", г. Екатеринбург
|
Добавлено: Вт 30 Авг 2011 14:19 Заголовок сообщения: |
|
|
код содержится в com сервере, экземпляр которого создается из программного модуля.
метод Start вызывается при запуске программного модуля, в качестве параметра методу Start передается объект Script.Disp. |
|
Вернуться к началу |
|
 |
Алексей В. Бастриков
Зарегистрирован: 02.06.2008 Сообщения: 118 Откуда: ООО "Инфопроект", г. Екатеринбург
|
Добавлено: Вт 30 Авг 2011 14:42 Заголовок сообщения: |
|
|
Просто хотелось бы подробнее узнать о структуре данного объекта, механизме его работы, какие интерфейсы он реализует, ... |
|
Вернуться к началу |
|
 |
APopov
Зарегистрирован: 19.06.2006 Сообщения: 347 Откуда: Самара
|
Добавлено: Вт 30 Авг 2011 18:39 Заголовок сообщения: |
|
|
видимо придётся отвечать(предполагать) за вас, а вы скажете правильно ли я предположил:
1) вы пишете модуль на C#, имеете целью написать COM-объект, вызываемый из imn в Ингео
2) в inm вы вызываете функцию
myComObj.Start Application
3) в С# вам приходится из переменной типа "object" доставать ссылку на приложение способом, который вы показали.
соответственно ваш вопрос: какие есть методы и свойства у "object" в C#, которые вы могли бы как то использовать в неизвестных целях? так?
в такой формулировке, т.к. я не являюсь специалистом по с#, рекомендую вам обратится к MSDN.
p.s.: описывайте больше подробносей относительно контекста вашего вопроса, часто люди, читающие форум и пытающиеся помоч, не находятся с вами в ментальном контакте  _________________ ОАО "Самара-Информспутник",
инженер-программист Попов Артем |
|
Вернуться к началу |
|
 |
Алексей В. Бастриков
Зарегистрирован: 02.06.2008 Сообщения: 118 Откуда: ООО "Инфопроект", г. Екатеринбург
|
Добавлено: Ср 31 Авг 2011 09:03 Заголовок сообщения: |
|
|
Да, действительно, у меня есть com объект на c# (но это не важно, то же самое можно сделать и на c++, и на delphi...), но в метод Start передается не Application, а Script.Disp
dim ComObject
sub Module_StartComplete()
set ComObject = CreateObject("ComServer.ComObject")
ComObject.Start Script.Disp
end sub
Это эксперимент
Я хотел узнать, какие свойства и методы предоставляет этот объект, какие интерфейсы реализует, как его можно полезно использовать? Может для обработки событий или что нибудь подобное... |
|
Вернуться к началу |
|
 |
APopov
Зарегистрирован: 19.06.2006 Сообщения: 347 Откуда: Самара
|
Добавлено: Ср 31 Авг 2011 13:16 Заголовок сообщения: |
|
|
ага. теперь понятно.
выполните в ингео
Код: | sub tryDisp
msgbox typename(Script.disp)
end sub |
вообще вам нужно копать вот в эту сторону http://msdn.microsoft.com/en-us/library/aa227637(v=VS.60).aspx
вобщем в сторону - как делается создание скриптовых вставок в Ингео _________________ ОАО "Самара-Информспутник",
инженер-программист Попов Артем |
|
Вернуться к началу |
|
 |
Алексей В. Бастриков
Зарегистрирован: 02.06.2008 Сообщения: 118 Откуда: ООО "Инфопроект", г. Екатеринбург
|
Добавлено: Чт 01 Сен 2011 09:08 Заголовок сообщения: |
|
|
Может разработчики что нибудь интересное расскажут...? |
|
Вернуться к началу |
|
 |
Михаил Власов

Зарегистрирован: 14.02.2005 Сообщения: 580 Откуда: ИНТЕГРО
|
Добавлено: Пт 02 Сен 2011 13:26 Заголовок сообщения: |
|
|
Script.Disp - это ваш скрипт в виде COM-объекта. Набор свойств и методов формируется из переменных (dim) и процедур/функций вашего скрипта.
Так что не ищите его в ИнГео API или в MSDN, не найдете. Вы сами являетесь создателем этого объекта. _________________ С уважением, Михаил Власов. |
|
Вернуться к началу |
|
 |
Алексей В. Бастриков
Зарегистрирован: 02.06.2008 Сообщения: 118 Откуда: ООО "Инфопроект", г. Екатеринбург
|
Добавлено: Чт 15 Сен 2011 11:03 Заголовок сообщения: |
|
|
Провел небольшое исследование.
Простым перебором разделов в ветке HKEY_CLASSES_ROOT\Interface реестра и с использованием Marshal.QueryInterface узнал, что Script.Disp приводится к интерфейсу IDispatchEx, которому в .net соответствует интерфейс IExpando, позволяющий динамически добавлять свойства, поля и методы в объект. Со свойствами получается, а вот с методами возвращает ошибку idispatchex does not support adding methods. |
|
Вернуться к началу |
|
 |
Михаил Власов

Зарегистрирован: 14.02.2005 Сообщения: 580 Откуда: ИНТЕГРО
|
Добавлено: Чт 15 Сен 2011 15:00 Заголовок сообщения: |
|
|
Я же написал:
Михаил Власов писал(а): | Script.Disp - это ваш скрипт в виде COM-объекта. Набор свойств и методов формируется из переменных (dim) и процедур/функций вашего скрипта.
Так что не ищите его в ИнГео API или в MSDN, не найдете. Вы сами являетесь создателем этого объекта. |
Script.Disp предназначен для доступа к переменным (dim)и процедурам(sub)/функциям(function), определенным в вашем гисовском скрипте.
Из .net это можно сделать только через рефлекшен или посредством переменных объявленных с ключевым словом dynamic.
Не пойму, что вы пытаетесь там еще найти и зачем? _________________ С уважением, Михаил Власов. |
|
Вернуться к началу |
|
 |
Алексей В. Бастриков
Зарегистрирован: 02.06.2008 Сообщения: 118 Откуда: ООО "Инфопроект", г. Екатеринбург
|
Добавлено: Чт 15 Сен 2011 15:09 Заголовок сообщения: |
|
|
Например, добавлять обработчики событий ИнГЕО не в скрипте, а внутри собственного com-сервера |
|
Вернуться к началу |
|
 |
Михаил Власов

Зарегистрирован: 14.02.2005 Сообщения: 580 Откуда: ИНТЕГРО
|
Добавлено: Чт 15 Сен 2011 15:40 Заголовок сообщения: |
|
|
Используйте делегирование событий из скриптовых обработчиков в методы обработки COM-объектов.
Это рекомендованная нами практика подключения внешних модулей, реализованных в виде COM-объектов (включая .NET-объекты). _________________ С уважением, Михаил Власов. |
|
Вернуться к началу |
|
 |
|