Переключение на Главную Страницу Страницы: 1 [2] 3 4 ... 6 ОтправитьПечать
Очень популярная тема (более 25 ответов) v7CLR: ВК для работы с .NET-типами без CCW (число прочтений - 56476 )
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 записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 ... 6
ОтправитьПечать