Конференция "KOL" » KOL консольное приложение вылетает при WriteLn
 
  • vss-sgpb © (28.02.12 11:29) [0]
    Win 2K, Delphi 6, KOL. При выполнении WriteLn(sOut) в консольном
    приложении, приложение завершается. (sOut:KOLstring )
  • rdnks (28.02.12 17:08) [1]
    может быть не "вылетает" а корректно завершается, сделав всё что от нее требовалось? Не пробовали ставить ожидающий ввода readln, или же зациклить программу на keystate?
  • RusSun © (28.02.12 17:16) [2]
    выложите на файлообменнике урезанный пример "иллюстрирующий" ошибку:)
  • vss-sgpb © (28.02.12 23:23) [3]
    Видимо, я делаю что-то не так.
    Занят приложением, находящемся на флешке актуально.
    98,2К, ХР, 7 - это, где отлаживаю свое приложение.
    "Вылетает" - корректно завершается.
    В приложении нет ReadLn, - на консоль выводится протокол.
    Ничего не меняю в исходнике, вставляя флешку на другой комп.
    Из свойств убираю в библиотеках SysDcuD6, в Рrogram делаю
    // перед  WriteLn и CharToOem, но в Unit-е эти команды не комментирую.
    RUN. OK.
    Убираю // в Рrogram.
    RUN. OK.
    + SysDcuD6
    OK
    Репите на Win 2K или Win 7 или ... (Везде Delphi 6 и  KOL).

    С почтением, VSS
  • rdnks (29.02.12 01:46) [4]
    Описание проблемы ну никак не помогает. Запись в поток вывода в дельфи всепоглощающь. Вылет быть может только в том случае, если переполнен буфер (а там порядка чуть меньше 4 гб) или не назначен стандартный поток вывода. Консоль вообще создана? Есть как минимум три варианта: указать в опциях линковщика Generate console application, добавить ключ в юнит  {$APPTYPE CONSOLE} или вызвать явно AllocConsole.
    Какой протокол? Где? Кто? Выложите минимальный исходник, в котором возникает проблема.
  • vss-sgpb © (29.02.12 17:41) [5]
    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.
  • Vladimir Kladov © (29.02.12 19:31) [6]
    Ну, вот так не вылетает, хоть комментарь хоть нет. А что такое uTools?


    program frd;
    {$APPTYPE CONSOLE}
    uses
    Windows,KOL;

    {$R *.res}

    var
      FlagStop: Boolean;
      sOut: String;
    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
    Readln;

    End.

  • vss-sgpb © (29.02.12 21:21) [7]
    1: uTools мониторит папки с поступающими в них время от времени файламаи от Abby FineReadera и преобразует в формат загрузки куда надо

    2: Readln завтра проверю

    3: А как же
    CharToOem(Pchar(sOUT),PChar(sOUT));         ЗДЕСЬ ОШИБКА при запуске в иной ОС
    Суть мне кажется в том, чтобы при запуске в другой ОС в каталоге отсутствовали лишние файлы, помнящие о прошлом приложения. Если это так, порекомендуйте минимум.

    4. В дальнейшем планирую перейти от вывода в Console в аналог на МСК. Оправдоно ли по памяти и времени? Но консоль добью.

    VSS
  • MTsv DN (29.02.12 23:43) [8]
    Отключите замену сис.файлов. Этому багу 100 лет...
  • Vladimir Kladov © (01.03.12 16:01) [9]
    Попробовал приведенный мной вариант с заменой SysD7 - работает и так и эдак, и с KOL 3.16, и 3.17. Никак не вылетает.
  • vss-sgpb © (01.03.12 21:55) [10]
    exe-файл maded in Delphi 6, Win 2K, KOL работает в  98, NT, 2K, XP. В 7 не проверял. < 50K, зверь, которого останавливает SLEEP. Я о Compilation. Прав ли MTsvDN: наличиствует столетоизвестная  необходимость отказаться от замены сис.файлов? Склоняюсь,-да :ReadLn,OEMtoCHAR и т.д.
  • rdnks (01.03.12 22:32) [11]
    Господи, да посмотрите вы исходные коды вызываемых функций. CharToOem ссылается на адекватную api, вывод в stdout, как говорилось, поглощает всё, даже файловый поток. Полчаса убил на то, чтобы воплотить вашу ошибку - результат ноль. И в ansi версию CharToOem запихивал юникод и наоборот. Максимум что происходит - выдает в поток непечатаемые символы. Win xp, 7, d7, td с заменой sysdcu и без.
  • rdnks (01.03.12 22:35) [12]
    и в какой другой ос? Какие файлы? Надеюсь у вас не включена компиляция с runtime packages?
  • GMax (10.03.12 23:31) [13]
    в какой-то из версий замены сис. файлов надо было юзать
    UseInputOutput;
    сразу после begin
  • vss-sgpb © (01.04.12 20:47) [14]
    Вы правы. Переустановил Delphi. КОЛ, МСК не подводят.
    Особенно благодарю Vladimir Kladov
 
Конференция "KOL" » KOL консольное приложение вылетает при WriteLn
Есть новые Нет новых   [118582   +31][b:0][p:0.001]