Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) v7CLR: ВК для работы с .NET-типами без CCW (число прочтений - 55787 )
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
v7CLR: ВК для работы с .NET-типами без CCW
11. Мая 2008 :: 21:47
Печать  
Внешняя компонента v7CLR.dll позволяет создавать в 1с объекты .NET(CLR) и предоставляет доступ к их свойствам и методам.
ВК написана по технологии Rainbow и не требует регистрации в реестре.

Отличительные особенности:
  • работает напрямую с CLR, что в некоторых случаях в несколько раз быстрее чем через CCW. т.е. отсутствуют промужуточные прокладки между 1С и CLR (BLContext -> IDispatch -> CCW -> CLR)
  • позволяет создавать объекты CLR-классов незарегистрированных для COM-Interop, т.е. не нужно выполнять regasm для используемых сборок
  • позволяет создавать объекты CLR-классов помеченных атрибутом ComVisible(false), что невозможно при использовании CLR-классов через COM-Callable Wrapper(CCW)
  • позволяет вызывать перегруженные методы CLR-классов, что также невозможно при использовании CCW
  • позволяет создавать объекты классов, не имеющих публичного конструктора по умолчанию

ВК перехватывает вызов системной функции СоздатьОбъект и если первым символом в имени
типа является "!", создает объект CLR-типа.
Для классов, находящихся в mscorlib.dll можно указывать только имя типа(включая все пространства имен).
Для остальных классов должно использоваться AssemblyQualifiedName  msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname.aspx.
Например так
Код
Выбрать все
Массив=СоздатьОбъект("!System.Collections.ArrayList");
Пингер=СоздатьОбъект("!System.Net.NetworkInformation.Ping, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
 


Для перегруженных методов ВК использует переименование методов, по следующей схеме:
  • перегруженные методы упорядочиваются по количеству параметров
  • для перегруженных методов с одинаковым количеством параметров разных типов порядок не определен
  • имя первого после упорядочивания метода остается неизменным
  • ко всем последующим методам добавляется номер начиная с 2

Внимание! Имена всех методов и свойств регистрозависимы.

Во вложении сама компонента, обработка с тестами и кратким примером использования и краткое описание.

Сравнение скорости работы v7CLR и CCW: Цитата:
Установка свойства CCW: 425 мс
Установка свойства v7CLR: 54 мс
Чтение свойства CCW: 406 мс
Чтение свойства v7CLR: 49 мс
Вызов метода CCW: 392 мс
Вызов метода v7CLR: 102 мс

Тесты выполнялись в цикле 10 000 раз.
Для тестов были использованы простейшие свойства и методы, чтобы время выполнения managed-кода оказывало меньшее влияние на измерения.

Планы по развитию:
  • Реализовать фабрику классов, при помощи которой можно будет создавать объекты типов, не имеющих публичного конструктора по умолчанию.
  • реализовать работу с value-типами и перечислениями
  • работа со статическими методами абстрактных классов.
  • работа с событиями
  • возможно реализация CLR-оберток для некоторых внутренних классов 1с, чтобы упростить написание CLR-плагинов к 1С


скачать компоненту можно тут: http://code.google.com/p/v7clr/
« Последняя редакция: 22. Сентября 2008 :: 08:51 - steban »  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #1 - 12. Мая 2008 :: 02:50
Печать  
Супер!
  
Наверх
ICQ  
IP записан
 
vivm
Full Member
***
Отсутствует



Сообщений: 159
Местоположение: Новосибирск
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #2 - 12. Мая 2008 :: 03:26
Печать  
То что надо! А что делать, что бы работало?

Ст2=СоздатьОбъект("!System.Collections.ArrayList");
{D:\DATABASE\FLAND1\EXTFORMS\1CPP\CLR.ERT(48)}: Неудачная попытка создания объекта (!System.Collections.ArrayList)
Пингер=СоздатьОбъект("!System.Net.NetworkInformation.Ping, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
{D:\DATABASE\FLAND1\EXTFORMS\1CPP\CLR.ERT(62)}: Неудачная попытка создания объекта (!System.Net.NetworkInformation.Ping, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)

попробовал на 2-х компьютерах, 2003 и XP, результат одинаков.
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #3 - 12. Мая 2008 :: 03:47
Печать  
А загружать компоненту пробовал?
  
Наверх
ICQ  
IP записан
 
vivm
Full Member
***
Отсутствует



Сообщений: 159
Местоположение: Новосибирск
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #4 - 12. Мая 2008 :: 03:53
Печать  
Попробовал  Очень довольный Получилось  Смех

понадеялся на то что по умолчанию все в обработке должно загружаться
  
Наверх
ICQ  
IP записан
 
Igor-bts
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 103
Зарегистрирован: 14. Июля 2006
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #5 - 12. Мая 2008 :: 06:22
Печать  
Если у объекты CLR конструктор c параметром, как будут создаваться
Как вариант:
Загрузчик = СоздатьОбъект("addin.ЗагрузчикCLR");
ОбъектCLR = Загрузчик.СоздатьОбъект("!System.Collections.ArrayList", парам1, парам2, парам3,....);
  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #6 - 12. Мая 2008 :: 12:48
Печать  
Igor-bts писал(а) 12. Мая 2008 :: 06:22:
Загрузчик = СоздатьОбъект("addin.ЗагрузчикCLR");
ОбъектCLR = Загрузчик.СоздатьОбъект("!System.Collections.ArrayList", парам1, парам2, парам3,....);

Да, что-то вроде такого и будет.
Только без всяких там "addin", т.к. это ВК Rainbow-типа Улыбка
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #7 - 12. Мая 2008 :: 14:21
Печать  
Ачуметь!
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #8 - 12. Мая 2008 :: 19:26
Печать  
В компоненте реализован класс CLRФабрика (синоним CLRFactory) с методом "Создать" (синоним "CreateInstance").

Пример использования:
Код
Выбрать все
Ф=СоздатьОбъект("CLRFactory");
инфо=Ф.Создать("System.IO.DriveInfo","c");
Сообщить("На диске C: свободно "+инфо.AvailableFreeSpace+" байт");
 


Качать в заглавном посте ветки.

Пока реализована передача параметров конструкторов типов Int32, String и любых ref-типов (предварительно созданных).
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #9 - 13. Мая 2008 :: 11:40
Печать  
По данным clr.ert : "На диске C: свободно 1356083200 байт"

Смотрю в проводнике в свойствах диска С: Free Space 22 830 858 240 bytes,    21,2 GB

Где собака порылась?

ЗЫ. Для справки: на компе стоит ХР Pro Eng SP3, все фремвоки с апдейтами, и всё прочее, что доступно через интерактивное виндоуз упдатэ.
« Последняя редакция: 14. Мая 2008 :: 14:34 - Kapet »  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #10 - 13. Мая 2008 :: 18:52
Печать  
Kapet писал(а) 13. Мая 2008 :: 11:40:
Где собака порылась?

В преобразовании Int64 в CNumeric.
Глюк налицо.

Задумался....
Ушел писать юнит-тесты
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #11 - 15. Мая 2008 :: 13:26
Печать  
Реализована работа с value-типами (вызов методов, чтение свойств).
Установка свойств и выполнение методов, изменяющих состояние объекта тоже возможны, только будут выполняться с копией объекта, которая потом будет уничтожена при размотке стека. Почему так, объяснять не буду. Это не баг - это фича. Если установка свойств value-типов кому-нибудь когда-нибудь понадобится, взамен могу сделать установку protected полей.

Исправлено неверное преобразование некоторых типов в CValue.

Написаны юнит-тесты на существующий функционал.
Работоспособность подтверждена тестами.

чуть было не порушил всё, когда делал работу с value-типами.
TDD рулит  Подмигивание
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #12 - 15. Мая 2008 :: 14:02
Печать  
Kapet писал(а) 13. Мая 2008 :: 11:40:
По данным clr.ert : "На диске C: свободно 1356083200 байт"
Смотрю в проводнике в свойствах диска С: Free Space 22 830 858 240 bytes,    21,2 GB

Спасибо! Теперь свободное место на диске определяется правильно.
  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #13 - 16. Мая 2008 :: 14:59
Печать  
Реализована работа с абстрактными классами и классами, не имеющими публичных конструкторов.
Если производится попытка создать абстрактный класс через СоздатьОбъект или через фабрику, то объект не создается, но в 1с возвращается обертка, позволяющая вызывать методы.
В связи с этим отпала необходимость реализовывать в компоненте что-то специальное для работы с перечислениями.

Попробую пояснить кодом.
Код
Выбрать все
ЗагрузитьВнешнююКомпоненту("v7CLR.dll");
Factory=СоздатьОбъект("CLRFactory");
Types=Factory.CreateInstance("System.Type"); // абстрактный класс
Enums=Factory.CreateInstance("System.Enum");
CreateMode=Enums.Parse(Types.GetType3("System.IO.FileMode"),"Create");
//System.IO.FileMode - тип-перечиление
//System.IO.FileMode.Create - значение перечисления
fstream=Factory.Создать("System.IO.FileStream","c:\test.bin",CreateMode);
bw=Factory.CreateInstance("System.IO.BinaryWriter",fstream);
Нач=_GetPerformanceCounter();
Для Сч=1 По 10000 Цикл
	bw.Write9(65535);
КонецЦикла;
Сообщить("файл записан: "+(_GetPerformanceCounter()-Нач)+" мс");
bw.Flush();
bw.Close();
 

  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #14 - 16. Мая 2008 :: 15:04
Печать  
steban писал(а) 11. Мая 2008 :: 21:47:
Планы по развитию:
  • Реализовать фабрику классов, при помощи которой можно будет создавать объекты типов, не имеющих публичного конструктора по умолчанию.
  • реализовать работу с value-типами и перечислениями
  • работа со статическими методами абстрактных классов.
  • работа с событиями
  • возможно реализация CLR-оберток для некоторых внутренних классов 1с, чтобы упростить написание CLR-плагинов к 1С

Для работы с событиями интерфейс видится следующий:
В классы, имеющие события, добавляем метод ПривязатьСобытияККонтексту (BindEventsToContext) с 2-мя параметрами:
- Контекст в котором реализованы процедуры-обработчики (контекст формы или КОП)
- префикс имени для процедур-обработчиков

есть возражения?
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #15 - 16. Мая 2008 :: 21:29
Печать  
steban писал(а) 16. Мая 2008 :: 15:04:
есть возражения?

Никак нет, май женераль! Ждем-с с нетерпением!

P.S. Прям даже не верится что это свершилось Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #16 - 17. Мая 2008 :: 00:18
Печать  
steban писал(а) 16. Мая 2008 :: 15:04:
есть возражения?

Неа, нету.
Как в итоге собрал, поделишься?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #17 - 17. Мая 2008 :: 07:52
Печать  
kms писал(а) 17. Мая 2008 :: 00:18:
Как в итоге собрал, поделишься?

Подключил MFC/Lib и MFC/Include от 6-й студии.
CRT естественно от 2005-й.
Классы, непосредственно взаимодействующие с 1с, не используют managed-типы и собираются без ключа /clr.

грабли, на которые я тебе жаловался, были связаны с дополнительным инициализирующим и cleanup кодом для классов, использующих managed-типы. я просто разделил классы, взаимодействующие с 1с и с CLR.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #18 - 17. Мая 2008 :: 10:32
Печать  
Степ, а можешь сделать небольшой тестовый проектик, типа "hello world" для VC8+MFC6+CRT8 и закинуть его куда-нибудь в раздел Разработка с исходниками?
И списком из INCLUDE и LIB, как у тебя в студии установлено.
Хотелось бы разобраться, но что-то не получается пока таким образом собирать.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #19 - 17. Мая 2008 :: 11:02
Печать  
steban

Так, взгляд прояснился, простой проект получилось собрать.
А с заголовками 1CHEADERS много пришлось возиться?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #20 - 22. Мая 2008 :: 14:54
Печать  
Сделал обработку событий.

Пример использования:
Код
Выбрать все
Перем Таймер;
Процедура ПриОткрытии()
	Таймер=СоздатьОбъект("!System.Timers.Timer, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
	Таймер.ПривязатьСобытияККонтексту(Контекст,"Таймер_");
	Таймер.Interval=2000; //мс
	Таймер.Start();
КонецПроцедуры	// ПриОткрытии

Процедура Таймер_Elapsed(s,e)
	Сообщить(e.SignalTime);
КонецПроцедуры 


или так:
Код
Выбрать все
Перем ФСНаблюдатель;
Процедура ПриОткрытии()
	ФСНаблюдатель=СоздатьОбъект("!System.IO.FileSystemWatcher, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
	ФСНаблюдатель.Path="c:\temp";
	ФСНаблюдатель.ПривязатьСобытияККонтексту(Контекст,"ФС_");
	ФСНаблюдатель.EnableRaisingEvents =1;
КонецПроцедуры

Процедура ФС_Changed(s,e)
	Сообщить(e.ChangeType+" "+e.Name);
КонецПроцедуры	// ФС_Changed
 

« Последняя редакция: 24. Июля 2008 :: 19:51 - steban »  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #21 - 22. Мая 2008 :: 14:57
Печать  
steban писал(а) 22. Мая 2008 :: 14:54:
!System.Timers.Timer, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

медвежуть какая-то Улыбка такое не запомнить Улыбка
  
Наверх
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #22 - 22. Мая 2008 :: 15:04
Печать  
trdm писал(а) 22. Мая 2008 :: 14:57:
медвежуть какая-то Улыбка такое не запомнить Улыбка

Никто запоминать и не просит Улыбка
Панель управления -> Администрирование -> Microsoft .NET Framework 2.0 Configuration

там все написано.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #23 - 22. Мая 2008 :: 15:07
Печать  
Если мне не изменяет память, .NET Framework 3.5 использует Runtime от 2-го фреймворка.
Так что можно попробовать работать с классами из 3.5.

Может кто-нибудь, у кого есть .NET Framework 3.5, это проверить?
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #24 - 23. Мая 2008 :: 05:58
Печать  
steban писал(а) 22. Мая 2008 :: 15:04:
Панель управления -> Администрирование -> Microsoft .NET Framework 2.0 Configuration

там все написано.


а у меня, почему-то, там нет Microsoft .NET Framework, хотя установил недавно 3.5, которая включает также и и 2.0 sp1, и 3.0 sp1 (увидел в списке установленных программ). Система у меня ХР sp2 rus
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #25 - 23. Мая 2008 :: 07:38
Печать  
steban писал(а) 22. Мая 2008 :: 15:07:
Если мне не изменяет память, .NET Framework 3.5 использует Runtime от 2-го фреймворка.
Так что можно попробовать работать с классами из 3.5.

Может кто-нибудь, у кого есть .NET Framework 3.5, это проверить?

Не работают. Например,
это работает:
Код
Выбрать все
//Namespace:  System
//Assembly:  mscorlib (in mscorlib.dll)
//Supported in: 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1, 1.0
TimeZone = CLRFactory.Создать("System.TimeZone"); 


это не работает:
Код
Выбрать все
//Namespace:  System
//Assembly:  System.Core (in System.Core.dll)
//Supported in: 3.5
TimeZoneInfo = CLRFactory.Создать("System.TimeZoneInfo"); 


Цитата:
TimeZoneInfo = CLRFactory.Создать("System.TimeZoneInfo");
{C:\PROGRAM FILES\1CV77\19\UKRATCDSQL\EXTFORMS\CLR TEST.ERT(4)}: Класс не найден
TimeZoneInfo = CLRFactory.Создать("System.TimeZoneInfo");
{C:\PROGRAM FILES\1CV77\19\UKRATCDSQL\EXTFORMS\CLR TEST.ERT(4)}: System.Runtime.InteropServices.SEHException: Внешний компонент создал исключение.
   в CBLModule.RaiseExtRuntimeError(SByte* , Int32 )
   в CCLRWrapper.{ctor}(CCLRWrapper* , Int32 nParamsCount, CValue** ppValue)
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #26 - 23. Мая 2008 :: 07:45
Печать  
berezdetsky писал(а) 23. Мая 2008 :: 07:38:
это не работает:
Код
Выбрать все
//Namespace:  System
//Assembly:  System.Core (in System.Core.dll)
//Supported in: 3.5
TimeZoneInfo = CLRFactory.Создать("System.TimeZoneInfo"); 


А если указать AssemblyQualifiedName ?

steban писал(а) 11. Мая 2008 :: 21:47:
Для классов, находящихся в mscorlib.dll можно указывать только имя типа(включая все пространства имен).
Для остальных классов должно использоваться AssemblyQualifiedName  msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname.aspx

  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #27 - 23. Мая 2008 :: 07:48
Печать  
sml писал(а) 23. Мая 2008 :: 05:58:
а у меня, почему-то, там нет Microsoft .NET Framework


а вот такой файлик в системе есть?
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\mscorcfg.msc
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #28 - 23. Мая 2008 :: 08:06
Печать  
steban писал(а) 22. Мая 2008 :: 15:04:
Панель управления -> Администрирование -> Microsoft .NET Framework 2.0 Configuration

можно еще так:
Код
Выбрать все
gacutil.exe /l >gac.txt 


gacutil.exe может быть в каталоге C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\ или где-нибудь тут: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #29 - 23. Мая 2008 :: 08:10
Печать  
steban писал(а) 23. Мая 2008 :: 07:45:
А если указать AssemblyQualifiedName ?

Не дочитал.  Улыбка

С AssemblyQualifiedName работает, но не так, как ожидалось. CLRFactory.Создать() как-бы создаёт объект, но у этого объекта нет конструкторов, по-этому хотелось бы видеть исключение с соответствующим текстом. Сейчас исключение возникает при вызове методов: Цитата:
Message(TimeZoneInfo.SupportsDaylightSavingTime);
{C:\PROGRAM FILES\1CV77\19\UKRATCDSQL\EXTFORMS\CLR TEST.ERT(5)}: System.NullReferenceException: В экземпляре объекта не задана ссылка на объект.
   в System.Object.GetType()
   в CCLRWrapper.GetPropInfo(CCLRWrapper* , Int32 )

Опять гоню, shared методы работают, всё ok.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #30 - 23. Мая 2008 :: 08:18
Печать  
berezdetsky писал(а) 23. Мая 2008 :: 08:10:
но у этого объекта нет конструкторов, по-этому хотелось бы видеть исключение с соответствующим текстом.

Так и задумано, чтобы для абстрактных классов и классов без публичных конструкторов, возвращалась заглушка, позволяющая вызывать статические методы.
getter и setter для свойств - методы не статические.
Исключение при вызове таких методов ИМХО вполне законно.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #31 - 23. Мая 2008 :: 08:31
Печать  
steban писал(а) 23. Мая 2008 :: 08:18:
getter и setter для свойств - методы не статические.

Заглянул в MSDN.
Оказывается, бывают и статические.
Но в данном случае (свойство SupportsDaylightSavingTime класса TimeZoneInfo) не статические.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #32 - 23. Мая 2008 :: 10:28
Печать  
Понял. Спасибо.  Улыбка
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #33 - 23. Мая 2008 :: 10:28
Печать  
steban писал(а) 23. Мая 2008 :: 07:48:
а вот такой файлик в системе есть?
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\mscorcfg.msc


даже папки такой нет

есть папка: C:\Program Files\Microsoft.NET\Primary Interop Assemblies, где лежат 2 длл-ки
и папка: C:\Program Files\Microsoft.NET\ADOMD.NET\100, в которой 1 длл-ка и 2 подпапки (ru en) с хмл
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #34 - 23. Мая 2008 :: 10:47
Печать  
sml писал(а) 23. Мая 2008 :: 10:28:
steban писал(а) 23. Мая 2008 :: 07:48:
а вот такой файлик в системе есть?
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\mscorcfg.msc


даже папки такой нет

А если поискать файл mscorcfg.msc на %SystemDrive%?
где-нибудь он вообще есть?
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #35 - 23. Мая 2008 :: 10:49
Печать  
berezdetsky писал(а) 23. Мая 2008 :: 08:10:
shared методы работают, всё ok.

Угу. Значит классы из 3.5 работают Улыбка
Спасибо, Иван.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #36 - 23. Мая 2008 :: 10:57
Печать  
steban писал(а) 23. Мая 2008 :: 10:47:
А если поискать файл mscorcfg.msc на %SystemDrive%?
где-нибудь он вообще есть?


нет такого файла. Нашлась похоже основная папка "каркаса": C:\WINDOWS\Microsoft.NET\Framework,
в котором есть подпапки:
1.0.хххх
1.1.хххх
2.0.хххх
3.0
3.5

Кстати, на сайте каркаса мелкопушистых я читал, что они поменяли метод администрирования оснастки, и теперь отказались от использования сценариев. Может в этом причина?

  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #37 - 23. Мая 2008 :: 11:02
Печать  
sml писал(а) 23. Мая 2008 :: 10:57:
Кстати, на сайте каркаса мелкопушистых я читал, что они поменяли метод администрирования оснастки, и теперь отказались от использования сценариев. Может в этом причина?

Икс его знает....
Кажется прийдется скачать фреймворк 3.5 и попробовать самому вытащить инфу о GAC.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #38 - 23. Мая 2008 :: 11:11
Печать  
Забыл еще один способ посмотреть Global Assembly Cache:
Открыть папку %SystemRoot%\assembly в проводнике.
Вместо содержимого папки должен отобразиться ShellExtension, а в нем содержимое GAC.
Там должно быть видно версии сборок, культуры, публичные ключи и т.п.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #39 - 23. Мая 2008 :: 11:36
Печать  
steban писал(а) 23. Мая 2008 :: 11:11:
Забыл еще один способ посмотреть Global Assembly Cache:
Открыть папку %SystemRoot%\assembly в проводнике.
Вместо содержимого папки должен отобразиться ShellExtension, а в нем содержимое GAC.
Там должно быть видно версии сборок, культуры, публичные ключи и т.п.


это есть, но как узнать их свойства и методы. Помнится, в 1-й версии был какой-то файл с описанием свойств и методов для сборок каркаса.
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #40 - 23. Мая 2008 :: 11:48
Печать  
sml писал(а) 23. Мая 2008 :: 11:36:
как узнать их свойства и методы

Reflector for .NET
Reflector is the class browser, explorer, analyzer and documentation viewer for .NET. Reflector allows to easily view, navigate, search, decompile and analyze .NET assemblies in C#, Visual Basic and IL.

Кстати, .NET Reflector показывает AssemblyQualifiedName для сборок. Оттуда можно его просто скопировать. Улыбка
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #41 - 23. Мая 2008 :: 17:07
Печать  
Степ, я правильно понимаю, что я могу использовать класс по работе с изображениями (хз, еще не смотрел что там есть) для того чтобы работать с twain/wia? и все события получу, не используя ULE/твой прокси?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #42 - 23. Мая 2008 :: 19:43
Печать  
Arta писал(а) 23. Мая 2008 :: 17:07:
Степ, я правильно понимаю, что я могу использовать класс по работе с изображениями?

Артем, ну как я могу тебе что-то обещать, если понятия не имею о чем речь.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #43 - 23. Мая 2008 :: 19:58
Печать  
С событиями, кстати, могут быть разные веселые штуки.
Мне не удалось заставить компоненту работать в STA (почему не удалось - это отдельная песня).
Поэтому обработчики событий работают в главном потоке компоненты, а не в главном потоке 1С.
И могут прерывать выполнение 1с-кода в любой момент.
По возможности, в коде обработчиков следует избегать использования глобальных переменных, а также объектов, которые активно используются.
Рекомендуется код обработчиков делать максимально лаконичным и быстрым.
Если это по каким-либо причинам невозможно, то стоит использовать схемы типа Delayed Event Handling, т.е. вызывать Сервис.ВнешнееСобытие из FormEx и Критичный код выполнять в процедуре ОбработкаВнешнегоСобытия.

Всем вышесказанным можно пренебречь, если речь идет о событиях визуальных компонентов.
Работа над хостингом Windows Forms контролов на формах 1С уже ведется Подмигивание
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #44 - 23. Мая 2008 :: 21:44
Печать  
Сделаю вид, что я понял все из вышесказанного Подмигивание
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #45 - 24. Мая 2008 :: 03:46
Печать  
steban писал(а) 23. Мая 2008 :: 19:58:
Поэтому обработчики событий работают в главном потоке компоненты, а не в главном потоке 1С.
И могут прерывать выполнение 1с-кода в любой момент.
это настораживает.
Выполнение обработчика событий - это ведь работа кода 1С. А этот код не многопоточен.
  

1&&2&&3
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #46 - 28. Мая 2008 :: 15:06
Печать  
В классе CLRFactory добавлен новый метод СоздатьНаФорме / CreateControl.

Пример использования:
Код
Выбрать все
Процедура ПослеОткрытия()
	Factory=СоздатьОбъект("CLRFactory");
	К=Factory.CreateControl(Форма.ф,"System.Windows.Forms.PropertyGrid, System.Windows.Forms,
		|Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
	//ф - идентификатор кнопки на форме
	К.SelectedObject=К;
	К.HelpVisible=0;
	К.ПривязатьСобытияККонтексту(Контекст,"ф_");
КонецПроцедуры	// ПослеОткрытия

Процедура ф_PropertyValueChanged(s,e)
	Сообщить(e);
КонецПроцедуры // ф_Click 

« Последняя редакция: 24. Июля 2008 :: 19:51 - steban »  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #47 - 28. Мая 2008 :: 20:59
Печать  
Исправил пару мелких глюков.
« Последняя редакция: 24. Июля 2008 :: 19:52 - steban »  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #48 - 28. Мая 2008 :: 21:08
Печать  
Кстати, для того, чтобы работал DataBinding, нужно явно инициализировать свойство BindingContext у контролов.
DataGridView по умолчанию использует BindingContext из родительской формы. И если он хостится на форме MFC, то Binding не работает. Подробности тут.

Код
Выбрать все
Процедура ПослеОткрытия()
	Factory=СоздатьОбъект("CLRFactory");
	G=Factory.CreateControl(Форма.ф,"System.Windows.Forms.DataGridView, System.Windows.Forms,
	|Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

	G.BindingContext=Factory.CreateInstance("System.Windows.Forms.BindingContext, System.Windows.Forms,
	|Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

	bs=Factory.CreateInstance("System.Windows.Forms.BindingSource, System.Windows.Forms,
		|Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
	DI=Factory.CreateInstance("System.IO.DriveInfo","c");
	BS.DataSource=DI.RootDirectory.GetDirectories();
	G.AutoGenerateColumns =1;
	G.DataSource=BS;
	G.ПривязатьСобытияККонтексту(Контекст,"grid_");
КонецПроцедуры	// ПослеОткрытия
 


Если используется несколько data-bound контролов, то стоит создать один BindingContext на всех.
  

wf.GIF ( 23 KB | Загрузки )
wf.GIF

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #49 - 31. Мая 2008 :: 17:18
Печать  
sml писал(а) 23. Мая 2008 :: 10:57:
Кстати, на сайте каркаса мелкопушистых я читал, что они поменяли метод администрирования оснастки, и теперь отказались от использования сценариев. Может в этом причина?

Ага, эта оснастка больше не распространяется с фреймворком, а распространяется только с SDK.
Подробнее почитать можно тут.
Файлы, необходимые чтобы проинсталлить оснастку на машине без SDK - во вложении.

Инструкция по установке: Цитата:
  • Start at some PC where the MSCORCFG.MSC is already installed.  This would typically be a development PC with either Visual Studio or the SDK installed.
  • Drill down to either "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727", "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin", or "C:\Program Files\Microsoft.NET\SDK\v2.0\Bin" to find the files below
  • Copy the following files to a flash drive (or network location)
    gacutil.exe
    mscorcfg.dll
    mscorcfg.msc
    mscormmc11.cfg
    mscormmc.dll
  • Distribute these files to the client PC in the   C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 directory
  • Register the DLLs using the Cas.reg file included in the download below
  • Create a shortcut to the mscorcfg.msc file in the Administrative Tools section of the control panel (also included in download)

  

CAS.zip ( 431 KB | Загрузки )

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #50 - 31. Мая 2008 :: 18:22
Печать  
Кстати, при помощи этой компоненты можно использовать элементы управления Windows Presentation Foundation (aka WPF, aka Win FX). Это возможно, если установлен .NET Framework 3.0 или выше.
Код
Выбрать все
Процедура ПослеОткрытия()
	Factory=СоздатьОбъект("CLRFactory");
	WFAssembly=", System.Windows.Forms,Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
	PFAssembly=", PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35";
	DRAssembly=", System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
	PCAssembly=", PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35";
	P=Factory.CreateControl(Форма.ф,"System.Windows.Forms.Panel"+WFAssembly);
	C=Factory.CreateInstance("System.Windows.Forms.Integration.ElementHost,
		|WindowsFormsIntegration, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
	Types=Factory.CreateInstance("System.Type");
	Enums=Factory.CreateInstance("System.Enum");
	mbly),"Fill");
	C.Dock=DockStyleFill;
	DI=Factory.CreateInstance("System.IO.DriveInfo","c");
	LV=Factory.CreateInstance("System.Windows.Controls.ListView"+PFAssembly);
	C.Child=LV;
	P.Controls.Add(C);
	LV.ItemsSource =DI.RootDirectory.GetDirectories();
	GV=Factory.CreateInstance("System.Windows.Controls.GridView"+PFAssembly);

	GVC.DisplayMemberBinding = Factory.CreateInstance("System.Windows.Forms.Binding"+WFAssembly,"Name");
	GV.Columns.Add(GVC);

	GVC.DisplayMemberBinding = );
	GV.Columns.Add(GVC);

	GVC.DisplayMemberBinding = Factory.CreateInstance("System.Windows.Data.Binding"+PFAssembly,"Attributes");
	GV.Columns.Add(GVC);
	LV.View=GV;
	LV.ПривязатьСобытияККонтексту(Контекст,"lv_");
	C.Invalidate();

	LVI=Factory.CreateInstance("System.Windows.Controls.ListViewItem"+PFAssembly);
	BP=LVI.GetType().GetField("BackgroundProperty").GetValue("всякаяфигня");
	S=Factory.CreateInstance("System.Windows.Setter"+PFAssembly,BP,
		Factory.CreateInstance("System.Windows.Media.Brushes"+PCAssembly).Azure);
	ST=Factory.CreateInstance("System.Windows.Style"+PFAssembly);
	ST.Setters.Add(S);
	LV.Style=ST;;
	гРФорма.ПослеОткрытия();
КонецПроцедуры	// ПослеОткрытия 

« Последняя редакция: 07. Июня 2008 :: 12:41 - steban »  

wpf1.GIF ( 15 KB | Загрузки )
wpf1.GIF

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #51 - 31. Мая 2008 :: 18:32
Печать  
А еще можно писать UI на XAML Улыбка
Код
Выбрать все
Процедура ПослеОткрытия()
	Factory=СоздатьОбъект("CLRFactory");
	WFAssembly=", System.Windows.Forms,Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
	PFAssembly=", PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35";
	P=Factory.CreateControl(Форма.ф,"System.Windows.Forms.Panel"+WFAssembly);
	C=Factory.CreateInstance("System.Windows.Forms.Integration.ElementHost,
		|WindowsFormsIntegration, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
	Types=Factory.CreateInstance("System.Type");
	Enums=Factory.CreateInstance("System.Enum");
	mbly),"Fill");

	Путь=""; Имя="";
	РасположениеФайла(Путь,Имя);
	OpenMode=Enums.Parse(Types.GetType3("System.IO.FileMode"),"Open");
	e);
	XR=Factory.CreateInstance("System.Windows.Markup.XamlReader"+PFAssembly);

	C.Child=XR.Load(FStream);
	C.Dock=DockStyleFill;
	P.Controls.Add(C);
КонецПроцедуры	// ПослеОткрытия
 


Кто знает, что такое XAML, поймет, что можно делать UI весьма Rich Улыбка
Чуть позже попробую соорудить пример.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #52 - 31. Мая 2008 :: 18:45
Печать  
steban писал(а) 31. Мая 2008 :: 18:22:
Код
Выбрать все
LVI=Factory.CreateInstance("System.Windows.Controls.ListViewItem"+PFAssembly);
BP=LVI.GetType().GetField("BackgroundProperty").GetValue("всякаяфигня"); 


Этот фрагмент кода будет выглядеть вот так:
Код
Выбрать все
kgroundProperty 


Когда я реализую работу с полями (не свойствами).

я всегда считал, что public fields - моветон, и все нормальные классы используют public properties
« Последняя редакция: 02. Июня 2008 :: 05:57 - steban »  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
miandrew
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 35
Зарегистрирован: 18. Октября 2006
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #53 - 07. Июня 2008 :: 09:12
Печать  
Набросал бы лучше ert-шек, а не исходный код с картинками.  Подмигивание Вот это было бы классно..
  
Наверх
 
IP записан
 
Aurelius
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Местоположение: г. Долгопрудный, МО
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #54 - 14. Августа 2008 :: 16:14
Печать  
Здравствуйте,
а у меня пример из поста http://www.1cpp.ru/forum/YaBB.pl?num=1210542476/50#50 почему-то не работает:

Цитата:
C.Dock=DockStyleFill;
{C:\...\TEST.ERT(497)}: Попытка присвоить значение недоступной для записи переменной (Dock)

Причем
ТипЗначенияСтр(C.Dock) = System.Windows.Forms.ControlBindingsCollection
ТипЗначенияСтр(DockStyleFill) = System.Windows.Forms.DockStyle

1Cpp.dll v2.5/3.0
v7CLR.dll v1.0.0.1

Кстати, а где теперь компонента находится?
  
Наверх
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #55 - 01. Сентября 2008 :: 08:34
Печать  
кто сабж применял, поделитесь примерами.
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #56 - 22. Сентября 2008 :: 07:33
Печать  
плиз поделитесь компонентой или ссылкой Улыбка
  
Наверх
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #57 - 22. Сентября 2008 :: 08:52
Печать  
скачать компоненту можно тут: http://code.google.com/p/v7clr/

развитие компоненты пока приостановлено
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
sslava74
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Зарегистрирован: 28. Ноября 2006
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #58 - 02. Октября 2008 :: 08:53
Печать  
Не много не понятно как статические методы вызывать
Извините разобрался
  
Наверх
 
IP записан
 
sslava74
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Зарегистрирован: 28. Ноября 2006
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #59 - 03. Октября 2008 :: 06:19
Печать  
А кто-нибудь смог загрузить XAML файл и отобразить через ElementHost?

Элементы WindowsForms - System.Windows.Forms - отображаются
а пример с WPF - не получился
  
Наверх
 
IP записан
 
Sirefanni
Экс-Участник


Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #60 - 24. Декабря 2008 :: 11:25
Печать  
[code]ЗагрузитьВнешнююКомпоненту( "v7CLR.dll" );
CLRFactory = СоздатьОбъект( "CLRFactory" );
ArrayList = CLRFactory.Создать( "System.Collections.ArrayList" );
ArrayList.Add( "item0" );[/code]
Подскажите, можно ли теперь извлечь добавленный элемент?
  
Наверх
 
IP записан
 
drumboss
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 3
Зарегистрирован: 08. Мая 2009
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #61 - 12. Мая 2009 :: 11:17
Печать  
Степан объясни пожалуйста поподробнее как откомпилировать компонент с MFC/Lib и MFC/Include от 6-й студии?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #62 - 12. Мая 2009 :: 12:11
Печать  
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Pelmen
Full Member
***
Отсутствует



Сообщений: 242
Зарегистрирован: 01. Июня 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #63 - 03. Июня 2009 :: 07:35
Печать  
отлично
большое спасибо)
  
Наверх
 
IP записан
 
Pelmen
Full Member
***
Отсутствует



Сообщений: 242
Зарегистрирован: 01. Июня 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #64 - 03. Июня 2009 :: 09:00
Печать  
steban писал(а) 28. Мая 2008 :: 21:08:
Кстати, для того, чтобы работал DataBinding, нужно явно инициализировать свойство BindingContext у контролов.
DataGridView по умолчанию использует BindingContext из родительской формы. И если он хостится на форме MFC, то Binding не работает. Подробности тут.

Код
Выбрать все
Процедура ПослеОткрытия()
	Factory=СоздатьОбъект("CLRFactory");
	G=Factory.CreateControl(Форма.ф,"System.Windows.Forms.DataGridView, System.Windows.Forms,
	|Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

	G.BindingContext=Factory.CreateInstance("System.Windows.Forms.BindingContext, System.Windows.Forms,
	|Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

	bs=Factory.CreateInstance("System.Windows.Forms.BindingSource, System.Windows.Forms,
		|Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
	DI=Factory.CreateInstance("System.IO.DriveInfo","c");
	BS.DataSource=DI.RootDirectory.GetDirectories();
	G.AutoGenerateColumns =1;
	G.DataSource=BS;
	G.ПривязатьСобытияККонтексту(Контекст,"grid_");
КонецПроцедуры	// ПослеОткрытия
 


Если используется несколько data-bound контролов, то стоит создать один BindingContext на всех.


а можно пример этой обработки?
у меня почему-то не работает и ошибок никаких не возникает
только при закрытии вываливается стандартная ошибка про память
  
Наверх
 
IP записан
 
davay2000
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 12. Июня 2009
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #65 - 15. Июня 2009 :: 08:54
Печать  
Подскажите. У меня не возвращаются события в 1с.
Как только не извращался - не заходит не в одну функцию ни в ФС_changed ни в ФС_renamed ни в ...

// ===============================
Процедура ФС_(s,e)
     Сообщить(e.ChangeType+" -"+e.Name);
КонецПроцедуры      // ФС_Changed


Процедура ФС_OnRenamed(s,e)
     Сообщить(e.ChangeType+" *"+e.Name);
КонецПроцедуры      // ФС_Changed

Процедура ФС_OnCreated(s,e)
     Сообщить(e.ChangeType+" /"+e.Name);
КонецПроцедуры      // ФС_Changed

Процедура ФС_OnChanged(s,e)
     Сообщить(e.ChangeType+" --"+e.Name);
КонецПроцедуры      // ФС_Changed

Процедура ФС_OnDeleted(s,e)
     Сообщить(e.ChangeType+" ++"+e.Name);
КонецПроцедуры      // ФС_Changed


Процедура ФС_disposed(s,e)
     Сообщить(e.ChangeType+" *"+e.Name);
КонецПроцедуры      // ФС_Changed

Процедура ФС_error(s,e)
     Сообщить(e.ChangeType+" *"+e.Name);
КонецПроцедуры      // ФС_Changed

Процедура ФС_renamed(s,e)
     Сообщить(e.ChangeType+" *"+e.Name);
КонецПроцедуры      // ФС_Changed

Процедура ФС_created(s,e)
     Сообщить(e.ChangeType+" /"+e.Name);
КонецПроцедуры      // ФС_Changed

Процедура ФС_changed(s,e)
     Сообщить(e.ChangeType+" --"+e.Name);
КонецПроцедуры      // ФС_Changed

Процедура ФС_deleted(s,e)
     Сообщить(e.ChangeType+" ++"+e.Name);
КонецПроцедуры      // ФС_Changed

//*******************************************
Процедура Сформировать()
     Factory=СоздатьОбъект("CLRFactory");

     //РАБОТАЕТ!!!!!!!!!!!!!!!!!
     инфо=Factory.Создать("System.IO.DriveInfo","c");
     Сообщить("На диске C: свободно "+инфо.AvailableFreeSpace+" байт");

     ФСНаблюдатель=СоздатьОбъект("!System.IO.FileSystemWatcher, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
     ФСНаблюдатель.Path="c:\temp\";
     ФСНаблюдатель.ПривязатьСобытияККонтексту(Контекст,"ФС_");
     
     //ФСНаблюдатель.Filter = "*.txt";

     ФСНаблюдатель.EnableRaisingEvents =1;

     сообщить("Наблюдатель установлен успешно.");
КонецПроцедуры

Процедура ПриОткрытии()
     Если ЗагрузитьВнешнююКомпоненту("v7CLR.dll") <> 1 Тогда
           Сообщить("Не удалось загрузить библиотеку v7CLR.dll");
           Форма.Закрыть();
           Возврат;
     КонецЕсли;
КонецПроцедуры

Помогите. Кто может. Уже кончилось терпение. Плачущий
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #66 - 15. Июня 2009 :: 10:06
Печать  
Pelmen писал(а) 03. Июня 2009 :: 09:00:
а можно пример этой обработки?
у меня почему-то не работает и ошибок никаких не возникает
только при закрытии вываливается стандартная ошибка про память

Вот
  

bindingtest.ert ( 6 KB | Загрузки )

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
davay2000
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 12. Июня 2009
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #67 - 15. Июня 2009 :: 14:18
Печать  
Вот обработка
  

TEST.ert ( 29 KB | Загрузки )
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #68 - 15. Июня 2009 :: 17:15
Печать  
davay2000 писал(а) 15. Июня 2009 :: 14:18:
Вот обработка

У меня эта обработка выводит Цитата:
ок
Created /111.txt
Changed --111.txt
Changed --111.txt
Не удалось выполнить метод Finalize
Сообщить(e.ChangeType+" *"+e.Name);
{C:\1C\V7CLR\TEST.ERT(40)}: Поле агрегатного объекта не обнаружено (ChangeType)

т.е. обработчики событий вызываются, Finalize у этого типа нет (а и был бы - этот метод для gc, руками вызывать не стОит), ну и свойству ChangeType в обработчике события Disposed взяться неоткуда..
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
davay2000
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 12. Июня 2009
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #69 - 16. Июня 2009 :: 07:36
Печать  
А у меня не возвращаются  Смущённый
Подскажите ЧТО мне нужно сделать чтобы найти причину.

Может кто-то знает методы, функции .NET через которые можно хотябы просмотреть запущенные потоки, а лучше - список наблюдаемых каталогов, или просто подскажет как проверить установилось наблюдение или нет! Озадачен
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #70 - 16. Июня 2009 :: 08:12
Печать  
хз. Если это поможет, то:
Vista SP1, .NET 3.5 SP1
1C 7.70.0.27
пустая конфигурация
1C++ 3.0.1.22
v7CLR 1.0.0.1 от 15.08.2008
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
davay2000
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 12. Июня 2009
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #71 - 16. Июня 2009 :: 11:39
Печать  
Не помогло. Правда пробовал на Win 2000.
Думаю проблема именно в FM. Но как его проверить?

Пробовал установить наблюдение за каталогом через ВК "AddIn.Gepard" - как ни странно работает. Я бы пользовался гепардовской ВК, но вся эта каша имменно из-за HP ноутбука на котором этот весь сырбор на Гепарде не работает. Т.е. работал, но после установки Акрониса - перестал и полная переустановка и формат С - не помог. Теперь ищу обходные пути(не через гепарда) доступа к фрэймфёрковской функции FileSystemWatcher.


Кто-нить может подсказать как проверить установилось ли наблюдение при помощи функции FileSystemWatcher?  Озадачен
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #72 - 16. Июня 2009 :: 11:49
Печать  
berezdetsky писал(а) 15. Июня 2009 :: 17:15:
У меня эта обработка выводит Цитата:
ок
Created /111.txt
Changed --111.txt
Changed --111.txt
Не удалось выполнить метод Finalize
Сообщить(e.ChangeType+" *"+e.Name);
{C:\1C\V7CLR\TEST.ERT(40)}: Поле агрегатного объекта не обнаружено (ChangeType)

какой интересный лог....

Дело в том, что на моей машине, с такой-же конфигурацией: berezdetsky писал(а) 16. Июня 2009 :: 08:12:
Vista SP1, .NET 3.5 SP1
1C 7.70.0.27
пустая конфигурация
1C++ 3.0.1.22
v7CLR 1.0.0.1 от 15.08.2008

события не ловятся.

davay2000 писал(а) 16. Июня 2009 :: 07:36:
А у меня не возвращаются  Смущённый

Погоняю дебаггером на выходных.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #73 - 16. Июня 2009 :: 11:50
Печать  
steban писал(а) 16. Июня 2009 :: 11:49:
Дело в том, что на моей машине, с такой-же конфигурацией

Разрабатывалось и тестировалось на другой машине.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #74 - 16. Июня 2009 :: 11:57
Печать  
Нашел!
Вот тут: steban писал(а) 16. Июня 2009 :: 11:49:
на моей машине, с такой-же конфигурацией: berezdetsky писал(а) 16. Июня 2009 :: 08:12:
Vista SP1, .NET 3.5 SP1
1C 7.70.0.27
пустая конфигурация
1C++ 3.0.1.22
v7CLR 1.0.0.1 от 15.08.2008

события не ловятся.

я чуток приврал. 1с++ при проверке была не загружена.

Так что для обработки событий нужно просто загрузить 1с++. Улыбка

я мог бы и раньше догадаться... внутренности 1с++ постепенно выветриваются из головы
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #75 - 16. Июня 2009 :: 12:38
Печать  
steban писал(а) 16. Июня 2009 :: 11:57:
я чуток приврал. 1с++ при проверке была не загружена.

Ну, судя по
Код
Выбрать все
	МетаДата = СоздатьОбъект("MetaDataWork");
	МетаДата.ПрисоединитьМД(КаталогИБ()+"1cv7.md"); 


из ПриОткрытии(), у davay2000 1С++ была загружена..  Озадачен
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
davay2000
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 12. Июня 2009
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #76 - 16. Июня 2009 :: 12:48
Печать  
Добавил в процедуру ПриОткрытии() загрузку 1cpp.dll
ЗАРАБОТАЛО!!!  Очень довольный
Буду тэстить - на заколдованном ноуте.

Правда почему-то первые несколько запусков внешней обработки геренили критическую ошибку - и 1ска вылетала при закрытии формы.
У меня при закрытии формы вызываются функции:
ФСНаблюдатель.EnableRaisingEvents = 0;
ФСНаблюдатель.Finalize();
ФСНаблюдатель.Dispose();

а также вызывается функция:
Процедура ФС_disposed(s,e)
     Сообщить(e.ChangeType+" *"+e.Name);
КонецПроцедуры

а при открытии запускася УскорительГК
     глУск=СоздатьОбъект("УскорительГК");
     глУск.Ускорить();

Я грешу на ускоритель - возможно это он и давал и дает эту проблему на ноуте.

Какое это счастье - когда есть ЧТО тэстить!  Улыбка
  
Наверх
 
IP записан
 
davay2000
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 12. Июня 2009
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #77 - 16. Июня 2009 :: 13:06
Печать  
Еще вопрос.
Как назначить наблюдение за несколькими каталогами и по нескольким маскам файлов?

А точнее вопрос - как правильно все это делать чтобы потом при снятии наблюдения - не оставлять за собой мусора?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #78 - 16. Июня 2009 :: 13:38
Печать  
davay2000 писал(а) 16. Июня 2009 :: 13:06:
как правильно все это делать чтобы потом при снятии наблюдения - не оставлять за собой мусора?

Вызов Finalize - явно лишнее. Возможно, именно из-за этого и вылетает при закрытии формы.
Присвоение EnableRaisingEvents нулю выполняется в Dispose.
Чтобы не оставлять мусора, вполне достаточно только вызова Dispose.
FileSystemWatcher на MSDN
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
davay2000
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 12. Июня 2009
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #79 - 16. Июня 2009 :: 14:02
Печать  
Вопрос по поводу разных путей и масок:

так все таки - вот ТАК правильно я установил?

//наблюдение за TXT
Наблюдатель=СоздатьОбъект("!System.IO.FileSystemWatcher, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
                 Наблюдатель.Path=ПутьКПапкеОбмена+ИмяПапкиДляВходящих;
Наблюдатель.ПривязатьСобытияККонтексту(Контекст,"ФС_");
);
////Наблюдатель.NotifyFilter =NotifyFilters.LastWrite;
Наблюдатель.IncludeSubdirectories = 0;
Наблюдатель.Filter = "*.txt";
Наблюдатель.EnableRaisingEvents =1;

//наблюдение за DBF
Наблюдатель2=СоздатьОбъект("!System.IO.FileSystemWatcher, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

Наблюдатель2.Path=ПутьКПапкеОбмена2+ИмяПапкиДляВходящих2;
Наблюдатель2.ПривязатьСобытияККонтексту(Контекст,"ФС_");
);
////Наблюдатель2.NotifyFilter =NotifyFilters.LastWrite;
Наблюдатель2.IncludeSubdirectories = 0;
Наблюдатель2.Filter = "*.DBF";
Наблюдатель2.EnableRaisingEvents =1;

или все-таки можно одним объектом Наблюдатель обойтись? Улыбка

steban что-то писал по поводу того что не нужно несколько раз создавать объект... ?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #80 - 16. Июня 2009 :: 15:37
Печать  
davay2000 писал(а) 16. Июня 2009 :: 14:02:
Вопрос по поводу разных путей и масок:

так все таки - вот ТАК правильно я установил?

Ответы на такие вопросы лучше всего искать в MSDN.

FileSystemWatcher.Path - свойство (System.IO)
FileSystemWatcher.Filter - свойство (System.IO)

Filter принимает подстановочные символы для соответствующих файлов, как это показано в следующих примерах.
Строка фильтра Отслеживание следующих файлов
*.* Все файлы (по умолчанию). Пустая строка ("") также отслеживает все файлы.
*.txt Все файлы с расширением TXT.
*recipe.doc Все файлы, оканчивающиеся на recipe, с расширением DOC.
win*.xml Все файлы, начинающиеся на win, с расширением XML.
Sales*200?.xls Соответствует следующим файлам:

Sales July 2001.xlsSales Aug 2002.xlsSales March 2004.xls

но не соответствует следующему:

Sales Nov 1999.xls
MyReport.Doc Отслеживает только MyReport.Doc

Судя по всему, использовать один FileSystemWatcher для слежки за разными файлами в разных каталогах не получится.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
vivm
Full Member
***
Отсутствует



Сообщений: 159
Местоположение: Новосибирск
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #81 - 06. Июля 2009 :: 12:22
Печать  
Пытаюсь сохранить результат выполнения php-скрипта. Если делаю vbs-скриптом, все получается:
Set web = CreateObject("System.Net.WebClient")
web.DownloadFile "http://address/getprice.php", "D:\mysite.txt"

аналогичным образом пытаюсь сделать через v7clr:

Код
Выбрать все
Web=СоздатьОбъект("!System.Net.WebClient, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
Web.DownloadFile("http://address/getprice.php","D:\mysite.txt"); 



шибко ругается:

Web.DownloadFile("http://address/getprice.php","D:\mysite.txt");
{D:\DATABASE\PSA\EXTFORMS\ПОЛУЧИТЬУСЛУГИТЕРМИНАЛА.ERT(180)}: System.Net.WebException: An exception occurred during a WebClient request. ---> System.Configuration.ConfigurationErrorsException: Error creating the Web Proxy specified in the 'system.net/defaultProxy' configuration section. ---> System.PlatformNotSupportedException: This operation is only supported on Windows 2000 SP3 or later operating systems.
  at System.Security.Principal.SecurityIdentifier..ctor(WellKnownSidType sidType, SecurityIdentifier domainSid)
  at System.Diagnostics.SharedUtils.EnterMutexWithoutGlobal(String mutexName, Mutex& mutex)
  at System.Diagnostics.SharedPerformanceCounter.GetCounter(String counterName, String instanceName, Boolean enableReuse, PerformanceCounterInstanceLifetime lifetime)
  at System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName, PerformanceCounterInstanceLifetime lifetime)
  at System.Diagnostics.PerformanceCounter.Initialize()
  at System.Diagnostics.PerformanceCounter.set_RawValue(Int64 value)
  at System.Net.NetworkingPerfCounters.Initialize()
  at System.Net.Configuration.SettingsSectionInternal..ctor(SettingsSection section)
  at System.Net.Configuration.SettingsSectionInternal.get_Section()
  at System.Net.Sockets.Socket.InitializeSockets()
  at System.Net.NetworkAddressChangePolled..ctor()
  at System.Net.AutoWebProxyScriptEngine.AutoDetector.Initialize()
  at System.Net.AutoWebProxyScriptEngine.AutoDetector.get_CurrentAutoDetector()
  at System.Net.AutoWebProxyScriptEngine..ctor(WebProxy proxy, Boolean useRegistry)
  at System.Net.WebProxy.UnsafeUpdateFromRegistry()
  at System.Net.WebProxy..ctor(Boolean enableAutoproxy)
  at System.Net.Configuration.DefaultProxySectionInternal..ctor(DefaultProxySection section)
  at System.Net.Configuration.DefaultProxySectionInternal.GetSection()
  --- End of inner exception stack trace ---
  at System.Net.Configuration.DefaultProxySectionInternal.GetSection()
  at System.Net.WebRequest.get_InternalDefaultWebProxy()
  at System.Net.HttpWebRequest..ctor(Uri uri, ServicePoint servicePoint)
  at System.Net.HttpRequestCreator.Create(Uri Uri)
  at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
  at System.Net.WebRequest.Create(Uri requestUri)
  at System.Net.WebClient.GetWebRequest(Uri address)
  at System.Net.WebClient.DownloadFile(Uri address, String fileName)
  --- End of inner exception stack trace ---
  at System.Net.WebClient.DownloadFile(Uri address, String fileName)
  at System.Net.WebClient.DownloadFile(String address, String fileName)
  at (Object& , Object )
  at CCLRWrapper.CallAsFunc(CCLRWrapper* , Int32 , CValue* , CValue** )

система при этом Windows 2003SP2.  Что посоветуете?
  
Наверх
ICQ  
IP записан
 
Vetalion
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 8
Зарегистрирован: 23. Сентября 2008
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #82 - 08. Июля 2009 :: 09:49
Печать  
За разработку огромное спасибо!
Почему-то далеко не все контролы добавляются на форму. Например TextBox не хочет.
Интересно, это недоработка или у кого-нибудь получилось?
  
Наверх
 
IP записан
 
EugenVitla
Junior Member
**
Отсутствует


школьнег

Сообщений: 82
Местоположение: Москва
Зарегистрирован: 21. Марта 2008
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #83 - 27. Мая 2010 :: 17:29
Печать  
а вот еще чего нашлось.
http://www.1centerprise.com/dotnet/
  
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7CLR: ВК для работы с .NET-типами без CCW
Ответ #84 - 24. Марта 2011 :: 14:12
Печать  
А вот если метод определён как
Код
Выбрать все
Public Function SomeName(key As Object, ByRef vid As Integer) ... 


При его вызове получается ошибка Цитата:
v = obj.SomeName(1, 1);
{Обработка.новый1.Форма.Модуль(6)}: System.NullReferenceException: В экземпляре объекта не задана ссылка на объект.
  в (Object& , Object )
  в CCLRWrapper.CallAsFunc(CCLRWrapper* , Int32 , CValue* , CValue** )

Это уже навсегда?  Озадачен


Upd:

Да, если сделать так
Код
Выбрать все
vid = ф.CreateInstance("System.Int32");
v = obj.SomeName(1, vid); 


то ошибка не возникает, но значение не возвращается (vid.ToString() всегда = "0").
« Последняя редакция: 30. Марта 2011 :: 10:22 - berezdetsky »  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Vlad80
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 20. Марта 2018
v7CLR: ВК для работы с .NET-типами без CCW
Ответ #85 - 20. Марта 2018 :: 19:22
Печать  
Коллеги, кто сталкивался?
поделитесь опытом.
Заранее благодарен.

Код
Выбрать все
	Loader 		= ЗагрузитьВнешнююКомпоненту("d:\Base1C\v7CLR.dll");
	Factory	= СоздатьОбъект("CLRFactory");
	S 		= Factory.CreateInstance("Microsoft.AnalysisServices.Server, Version=11.0.0.0, Culture=ru, PublicKeyToken=89845dcd8080cc91");

 





не работает.
Выдает ошибку:

S            = Factory.CreateInstance("Microsoft.AnalysisServices.Server, Version=11.0.0.0, Culture=ru, PublicKeyToken=89845dcd8080cc91");
{D:\BASE1C\OLAP\ConnectTest.ERT(13)}: System.IO.FileLoadException: Данное имя сборки или база кода недействительны. (Исключение из HRESULT: 0x80131047)
   в System.RuntimeTypeHandle._GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, Boolean loadTypeFromPartialName)
   в System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
   в System.RuntimeType.PrivateGetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
   в System.Type.GetType(String typeName)
   в CCLRWrapper.{ctor}(CCLRWrapper* , Int32 nParamsCount, CValue** ppValue)
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать