Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #30 : 05-02-2008 09:21 » |
|
Известные разные любопытные проекты, находящиеся в зачаточном состоянии. Типа: http://channel8.msdn.com/Posts/Cosmos-the-C-OS-that-you-can-play-with/Если их доведут до ума, будет интересно.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
jur
Помогающий
Offline
|
|
« Ответ #31 : 06-02-2008 08:57 » |
|
Ну, это для меня очень уж круто! :-) Я ведь пока еще только в начальной стадии нахожусь...
|
|
|
Записан
|
MPEG-4 - в массы!
|
|
|
Ochkarik
|
|
« Ответ #32 : 06-02-2008 11:17 » |
|
dimka, пардон про 512 действительно просмотрел) в общем... о чем я хотел сказать... в общем вы правы. по 512 байт пересылать - с такой частотой... не получится. однозначно. и боюсь не только в .NET но и в обычных Сях я бы не поручился.. однозначно сборку пакетов а драйвер. тока так.
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #33 : 31-07-2009 07:55 » |
|
чтоб новую тему не заводить...
Как в шарповую функцию передать ссылку на структурный тип ? Должно же быть такое, иначе я не понимяу причину существования этого языка
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #34 : 31-07-2009 08:29 » |
|
Алексей1153++, ты должен передать в функцию указатель (.NET тип System.IntPtr - аналог void *). А дальше внутри .NET разыменовать этот указатель в структуру System.Runtime.InteropServices.Marshal.PtrToStructure.
И смотри, что .NET не будет управлять памятью этой структуры, находящейся за указателем. Т.е. ты сам должен позаботиться об освобождении этой памяти.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #35 : 31-07-2009 08:34 » |
|
Dimka, а штатных средств не предусмотрено что ли ? Это странно. Наверное меньше текста и заморочек будет, если обернуть в класс :DD
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #36 : 31-07-2009 08:58 » |
|
а ещё вопросик предупреждение CS1690: Доступ к члену в "form_1.m_days" может вызвать исключение времени исполнения, поскольку он является полем класса, который упаковывается и передается по ссылке код такой //открываем на редактирование form_1 dlg=new form_1(); if(DialogResult.OK==dlg.ShowDialog()) { int n=dlg.m_days; //m_days - это public int ... }
что за бред , ведь dlg не вышел из видимости ещё
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #37 : 31-07-2009 14:48 » |
|
Dimka, а штатных средств не предусмотрено что ли ? Штатных средств для чего? Я тебе и написал штатные средства получения доступа к внешним структурам. CS1690 В MSDN же написано: To resolve the warning, copy the member into a local variable and call the method on that variable. // CS1690.cs using System;
class WarningCS1690: MarshalByRefObject { int i = 5;
public static void Main() { WarningCS1690 e = new WarningCS1690(); e.i.ToString(); // CS1690
// OK int i = e.i; i.ToString(); e.i = i; } } Видимо, твой dlg собран так, что может быть как объектом в твоей программе, так и локальной заглушкой (stub) объекта в удалённом процессе (по аналогии с COM-объектами). А в .NET, как известно, типы данных различаются как "передаваемые по ссылке" и "передаваемые по значению". Твой int - тип, экземпляры которого передаются значением. Т.е. для операций с этим значением нужна локальная переменная, где это значение находится. А внутри твоего объекта, который может быть заглушкой, на самом деле этого значения не находится. Оно должно быть сначала получено с удалённого объекта и куда-то сохранено, и только потом с ним можно выполнять какие-нибудь действия. Если ты не заводишь локальную переменную, в которую сохраняешь значение 1 раз, то при разных операциях на самом деле могут идти многочисленные запросы к удалённому объекту, и не факт, что будет получаться одно и то же. В общем члены таких типов у объектов таких классов с точки зрения программирования чем-то похожи на переменные C++ с квалификатором volatile. int volatile x; Т.е. могут менять значения вне текущего потока управления. И компилятор указывает, что от греха подальше лучше их скопировать в локальную переменную, которая гарантированно не будет меняться нигде, кроме текущего кода. Хотя, если не хочется, то можно и не копировать, но warning останется
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #38 : 31-07-2009 17:55 » |
|
понятненько ) Я скопирую, а то окно вывода загадилось ))
а ещё вопрос, не нашёл в настройках, если там вообще есть, как отучить редактор от вредной вещи: когда начинаю комментарий с /* , то после перевода строки редактор ляпает символ "*". неудобно как-то
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #39 : 31-07-2009 18:03 » |
|
почему не удаётся
const string txt=... .ToString();
или тут как-то по хитрому из неконстантного в константный тип преобразование делается ? Уфф
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #40 : 31-07-2009 19:11 » |
|
Алексей1153++, ты вообще где видел, чтобы константа инициализировалась значением переменной? Const ведь обрабатывается компилятором. Справа должна быть либо константа, либо вычислимое на этапе компиляции выражение.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #41 : 31-07-2009 19:20 » |
|
видел и применял неоднократно. В С++
int i=1; const int k=i;
Тут же я хотел const, чтобы случайно не поменять значение локальной переменной, куда скопировал из диалога
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #42 : 04-08-2009 07:39 » |
|
чтоб новую тему не заводить...
Как в шарповую функцию передать ссылку на структурный тип ? Должно же быть такое, иначе я не понимяу причину существования этого языка
а есть проще возможность, оказывается void f(out int n) { n=7; }
int n=0; f(out n); //n==7
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #43 : 04-08-2009 08:07 » |
|
пытаюсь сделать аналог atoi из C++ Почти получилось, не знаю только, как в регвыражении задать, что если в начале строки не цифра, то так же надо вернуть "" Сейчас @"[\+\-]{0,1}\d+" выбирает число верно, но не сначала строки (то есть "qqq123" тоже вернёт 123) public static int atoi(string text) { try { //найти int число, начинающееся с +,- или цифры text=System.Text.RegularExpressions.Regex.Match(text,@"[\+\-]{0,1}\d+").ToString(); //парсим в цифру return int.Parse(text); } catch(Exception) { }
return 0; }
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #44 : 04-08-2009 10:23 » |
|
пытаюсь сделать аналог atoi из C++ А зачем изобретать велосипед? Convert.ToInt32(<любой стандартный тип>). Затем int.Parse(<строка>) - это если в строке точно число, иначе исключение. int.TryParse - это без исключения. Аналогичные статические методы есть у других классов чисел.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #45 : 04-08-2009 10:29 » |
|
да, японачалу это использовал, оба способа пробовал, но у них один недостаток, которого нет у atoi :
они кидают исключение в случаях, когда в строке не цифра. А частенько требуется достать циферку из строки вида
12wdfdsfg
а TryParse умеет кидать System.ArgumentException , кстати )
|
|
« Последнее редактирование: 04-08-2009 10:33 от Алексей1153++ »
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #46 : 04-08-2009 11:56 » |
|
Алексей1153++, ну дак и достань "циферку" регулярным выражением, как все белые люди делают а TryParse умеет кидать System.ArgumentException , кстати ) В MSDN про это ничего не сказано - все возможные входы и даже null не валят исключений, а возвращают false. Извращаться меньше надо
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #47 : 04-08-2009 15:18 » |
|
да, это я промах дал, это у перегруженной TryParce исключение // Исключения: // System.ArgumentException: // Параметр style не содержит значения из перечисления System.Globalization.NumberStyles. // -или- Параметр style не является сочетанием значений System.Globalization.NumberStyles.AllowHexSpecifier // и System.Globalization.NumberStyles.HexNumber. public static bool TryParse(string s,NumberStyles style,IFormatProvider provider,out int result); }
- это не из мсдн, а из файла студии Алексей1153++, ну дак и достань "циферку" регулярным выражением, как все белые люди делают а я чОрный людь ))) так я и достал ) Но как задать выражение, чтобы смотрелось только с начала строки ?
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #48 : 04-08-2009 16:14 » |
|
Ну в обычных регулярках, значек ^ обозначает начало строки и значек $ конец. Т.е. чтоб выташить цифру в твоем случае, я бы написал ^\([-+]\{0,1\}[0-9]\+\).*$ Но это по правилам sed.
|
|
« Последнее редактирование: 04-08-2009 16:26 от Finch »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #49 : 05-08-2009 04:56 » |
|
Финч, спасибо, ^ - самое то. //аналог atoi из C++ public static int atoi(string text) { try { text=System.Text.RegularExpressions.Regex.Match(text,@"^[\+\-]{0,1}\d+").ToString(); if(text=="")return 0;
return int.Parse(text); } catch(Exception) { }
return 0; }
|
|
|
Записан
|
|
|
|
|