| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		Алексей В. Бастриков
 
 
  Зарегистрирован: 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-объекты). _________________ С уважением, Михаил Власов. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		 |