Да дело не в консольном окне, а в перенаправлении вывода… Хотя в некоторых случаях хотелось бы чтоб и его не было.
У меня всё работает. Использую следующий код:
{$Reference 'System.Windows.Forms.dll'}
Begin
Var ping := new System.Diagnostics.ProcessStartInfo();
ping.UseShellExecute := false;
ping.RedirectStandardOutput := true;
ping.FileName := 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe';
ping.Arguments := '-target:library -r:System.Threading.dll -r:System.Drawing.dll -r:System.IO.dll -optimize -unsafe -out:ColorRestorer.dll ColorRestorer.cs';
Var process := new System.Diagnostics.Process();
process.StartInfo := ping;
process.Start();
Var output := process.StandardOutput.ReadToEnd();
System.Windows.Forms.MessageBox.Show(output);
process.WaitForExit();
End.
А что именно нужно сделать?
Вы мой код запустите, мне компилятор C# не нужен сейчас. Нужно - мне пока что ничего, для соседней темы писал программу и увидел что это не работает если запускать обычным F9 а не Shift+F9…
Я предложил Вам не компилятор, а метод, с помощью которого я его вызывал. Принцип тот-же.
Может объясните наконец, почему нужна привязка к оболочке?
я писал:
Undefined FileName(0) : Ошибка при сохранении сборки: Процесс не может получить доступ к файлу, так как этот файл занят другим процессом. (Исключение из HRESULT: 0x80070020)
Эту ошибку я получил пытаясь запустить программу не первый раз. Но она плавающая и срабатывает только при первой компиляции после запуска паскаля (а может и компьютера).
И опять же потому что она Undefined FileName
- ужасно мешает.
Попробую объяснить, почему возникает ошибка. Ваша программа запускает внешнюю программу, перенаправляя его выходной поток в поток Вашей программы. Я не могу точно сказать механизм, но мне кажется что происходит следующее: Вы запускаете программу в режиме связи с оболочкой. Оболочка перехватывает выходной и входной потоки программы, однако выходной поток связан с другим, внешним потоком. Эта цепочка вызывает исключение во внешнем потоке. Либо другой вариант: Программа считывает выходной поток до конца, однако конец не определён, следовательно программа останавливает своё выполнения, ожидая конца потока. При этом обновляя данные. Оболочка влезает в выполнение программы, создавая внешние задержки и воздействуя на выходной поток. Это опять таки приводит к исключению.
Этим типом вообще мало кто пользуется. Во всяком случае я года за 3 ни разу и не вспоминал о нём.
Ну это Вы зря. Для финансовых расчетов с большими числами - самое то. 29 знаков с фиксированной точкой.
Я же не сказал, что никто не пользуется. Иначе его бы в .NET не было. Другое дело, что финансовыми расчётами занимается далеко не каждый программист. Говорят, что Decimal работает слишком медленно для научных вычислений, да и Single с Double спокойно удовлетворяют потребностям.
А Вы как считаете, если взять весь мир, в какой сфере больше программистов - в научной или в финансово-экономической?
Я вообще впервые слышу о программистах, специализирующихся на чисто финансовых задачах. Кроме финансистов и учёных есть и другие области, в которых, на сколько мне известно, Decimal не находит широкого применения.
Мда… Иногда тут просто детский сад какой-то начинается. Холивары на пустом месте, каких программистов больше, что такое “правило” и т.п. Это правда все еще форум мехмата или уже филиал 4сhan’а?
@Admin Таблица – это хорошо, но вы не отреагировали на более важный вопрос касательно ошибок компиляции и работы анализатора кода с типом decimal
.
Похоже, вам иногда лишь бы возразить, все равно о чем, по делу или нет. Из Справки:
Это стандартный тип для данного диалекта языка и должен поддерживаться полноценно, без исключений. Никакого “страха и риска” быть не должно.
А речь ведь шла не о количестве программистов, а о том, насколько активно тип Decimal используется. Если он никому не нужен, то зачем им заниматься?
Программисты не специализируются на задачах (как, впрочем, и на языках программирования), если они - профессиональные программисты. Они работают в той сфере и на тех языках, где им платят. Поскольку понятие “профессиональный” как раз и означает, что человек получает основные средства к существованию от указываемой профессии. И вопрос был задан не о том, сколько программистов специализируется в той или иной сфере, а сколько их там работает, т.е. пишет и сопровождает соответствующие задачи. Я, к примеру, проработал на научных и инженерных задачах чуть больше 10 лет, лет 15 на экономико-статистических, а последние 20 лет - на банковских (экономико-финансовых) задачах.
Перестаньте экстраполировать свой ограниченный опыт на весь мир! Если вы до сих пор не понимаете для чего он нужен, то это совсем не означает, что им никто не пользуется и что он никому не нужен.
Далеко не всегда формат чисел с плавающей двоичной точкой (real / double, single – как это обычно реализовано в “железе”) удовлетворяет задаче работы с вещественными числами. Вот вам простой пример для сравнения:
begin
var a:decimal := 0.1 + 0.2;
println('Сравнение с Decimal:', a = 0.3 ? 'Математически верно' : 'Математически неверно!');
// Результат: Математически верно
var b:real := 0.1 + 0.2;
println('Сравнение с Real:', b = 0.3 ? 'Математически верно' : 'Математически неверно!');
// Результат: Математически неверно!
end.
Да, чаще всего потребность в подобном возникает для бухгалтерских, банковских и прочих финансовых расчетов, но не только. Decimal, как и все прочие типы, имеет свои собственные ограничения и недостатки, но в определенных задачах возможность работы с числами в формате с плавающей десятичной точкой просто неоценимы, и не имеет ровно никакого значения, часто они у кого-то встречаются или нет.
Я понимаю, для чего он нужен и нигде не писал, что им никто не пользуется. Я не предлагал отказаться от него. Просто хотелось бы понять, насколько активно он используется именно в Паскале.
Глеб, вам не кажется, что вы не только до конца не понимаете то, о чем тут так категорично заявляете, а еще и немного “путаетесь в своих показаниях”? Ну то такое…
В большинстве индустриальных языков, предназначенных для решения широкого круга практических задач есть свой тип Decimal или эквивалентный ему по свойствам (иногда встроенный, иногда в виде доп. библиотеки/расширения), напр., в С#, Java, Python, C99, даже в Visual Basic и VBA, а также во всех развитых универсальных СУБД типа MySQL, InterBase, DB/2 и др. Это как бы намекает о востребованности подобного функционала в глобальной индустрии IT.
В данном диалекте Паскаля это стандартный тип, унаследованный от С#, и это очень здорово, т.к. серьезно расширяет круг потенциально решаемых на нем задач.
Мне кажется, такая постановка вопроса абсолютно бессмысленна, по нескольким причинам:
- Тип Decimal – это уже стандартная часть данного ЯП, мы не обсуждаем здесь расширение функционала, а только лишь устранение ошибок или недоделок;
- Насколько часто кто-то чем-то пользуется зависит в первую очередь от круга решаемых им задач, а не от конкретного языка. Могут быть как те, кто каждый день в течении многих лет этим пользуется в разных языках, так и те, кто вообще никогда с этим не сталкивался или просто не знает/не понимает что это такое и для чего это нужно.
- Пытаться делать какие-либо обобщенные “статистические” выводы из ответов на форуме, которым более-менее активно пользуются чел. 10-12, было бы по меньшей мере наивно.
И вообще, ваш “вопрос” в контексте данного обсуждения – ничто иное, как попытка сохранить лицо после целой серии нелепых утверждений, с которых вы начали свою бессмысленную критику типа Decimal. Именно это я и называю “детским садом”: попытка везде вставить свои ценные “пять копеек” вне зависимости от того, насколько глубоко ты знаком с предметом обсуждения, подмена контекста, категоричность суждений, обобщение частностей и т.п. Пора уже повзрослеть и относиться к себе и своему опыту/знаниям критически.
Прошу прощения у остальной публики за оффтоп…
Можете объяснить, что такое тайпкласс? Это аналог интерфейса?