-
Win 2K, Delphi 6, KOL. При выполнении WriteLn(sOut) в консольном приложении, приложение завершается. (sOut:KOLstring )
-
может быть не "вылетает" а корректно завершается, сделав всё что от нее требовалось? Не пробовали ставить ожидающий ввода readln, или же зациклить программу на keystate?
-
выложите на файлообменнике урезанный пример "иллюстрирующий" ошибку:)
-
Видимо, я делаю что-то не так. Занят приложением, находящемся на флешке актуально. 98,2К, ХР, 7 - это, где отлаживаю свое приложение. "Вылетает" - корректно завершается. В приложении нет ReadLn, - на консоль выводится протокол. Ничего не меняю в исходнике, вставляя флешку на другой комп. Из свойств убираю в библиотеках SysDcuD6, в Рrogram делаю // перед WriteLn и CharToOem, но в Unit-е эти команды не комментирую. RUN. OK. Убираю // в Рrogram. RUN. OK. + SysDcuD6 OK Репите на Win 2K или Win 7 или ... (Везде Delphi 6 и KOL).
С почтением, VSS
-
Описание проблемы ну никак не помогает. Запись в поток вывода в дельфи всепоглощающь. Вылет быть может только в том случае, если переполнен буфер (а там порядка чуть меньше 4 гб) или не назначен стандартный поток вывода. Консоль вообще создана? Есть как минимум три варианта: указать в опциях линковщика Generate console application, добавить ключ в юнит {$APPTYPE CONSOLE} или вызвать явно AllocConsole. Какой протокол? Где? Кто? Выложите минимальный исходник, в котором возникает проблема.
-
program frd; {$APPTYPE CONSOLE} uses Windows,KOL, uTools in 'uTools.pas';
{$R *.res}
var FlagStop: Boolean; Begin sOut:=Date2StrFmt('yy.MM.dd',Now)+' '+Time2StrFmt('HH:mm:ss',Now)+' CTAPT FRD';
CharToOem(Pchar(sOUT),PChar(sOUT)); // Ошибка. sOUT: string. Глобальная, объявлена в uTools
WriteLn(sOut); ..// Вылетает если закомментировать CharToOem while NOT FlagStop do begin Flag:=ConvertIn(); //Находится в uTools.pas sTe:=Time2StrFmt('HHmmss',Now); if sTe>=TimeOut then FlagStop:=True; end; End.
-
Ну, вот так не вылетает, хоть комментарь хоть нет. А что такое uTools?
program frd;
uses
Windows,KOL;
var
FlagStop: Boolean;
sOut: String;
Begin
sOut:=Date2StrFmt('yy.MM.dd',Now)+' '+Time2StrFmt('HH:mm:ss',Now)+' CTAPT FRD';
WriteLn(sOut); Readln;
End.
-
1: uTools мониторит папки с поступающими в них время от времени файламаи от Abby FineReadera и преобразует в формат загрузки куда надо
2: Readln завтра проверю
3: А как же CharToOem(Pchar(sOUT),PChar(sOUT)); ЗДЕСЬ ОШИБКА при запуске в иной ОС Суть мне кажется в том, чтобы при запуске в другой ОС в каталоге отсутствовали лишние файлы, помнящие о прошлом приложения. Если это так, порекомендуйте минимум.
4. В дальнейшем планирую перейти от вывода в Console в аналог на МСК. Оправдоно ли по памяти и времени? Но консоль добью.
VSS
-
Отключите замену сис.файлов. Этому багу 100 лет...
-
Попробовал приведенный мной вариант с заменой SysD7 - работает и так и эдак, и с KOL 3.16, и 3.17. Никак не вылетает.
-
exe-файл maded in Delphi 6, Win 2K, KOL работает в 98, NT, 2K, XP. В 7 не проверял. < 50K, зверь, которого останавливает SLEEP. Я о Compilation. Прав ли MTsvDN: наличиствует столетоизвестная необходимость отказаться от замены сис.файлов? Склоняюсь,-да :ReadLn,OEMtoCHAR и т.д.
-
Господи, да посмотрите вы исходные коды вызываемых функций. CharToOem ссылается на адекватную api, вывод в stdout, как говорилось, поглощает всё, даже файловый поток. Полчаса убил на то, чтобы воплотить вашу ошибку - результат ноль. И в ansi версию CharToOem запихивал юникод и наоборот. Максимум что происходит - выдает в поток непечатаемые символы. Win xp, 7, d7, td с заменой sysdcu и без.
-
и в какой другой ос? Какие файлы? Надеюсь у вас не включена компиляция с runtime packages?
-
в какой-то из версий замены сис. файлов надо было юзать UseInputOutput; сразу после begin
-
Вы правы. Переустановил Delphi. КОЛ, МСК не подводят. Особенно благодарю Vladimir Kladov
|