Funkcje AllocConsole i FreeConsole nie zwracaja FALSE
Czyli problemem jest sam WriteLn
i tutaj pasuje mieć treść wyjątku.
Zastanawia mnie magia polecenia Writeln ;)
[…]
Uruchamiam funkcje z API windows-a AllocConsole i nagle writeln działa (w jaki sposób ?)
Wszystko zależy od kompilatora i biblioteki standardowej. Sam WriteLn
jest pseudoprocedurą, czyli tworem nie posiadającym swojej definicji. Output dla wszystkich jej wywołań jest emitowany dynamicznie w trakcie kompilacji, więc aby wiedzieć co dokładnie wykonuje, trzeba albo zagłębić się w kod kompilatora, albo sprawdzić kod assemblerka.
Nie wiem jak w Delphi, ale w Lazarusie do trzymania uchwytu służy zmienna StdOutputHandle
. Podczas dynamicznego tworzenia konsoli trzeba dodatkowo przypisać True
do globalnej zmienej IsConsole
i wywołać procedurę SysInitStdIO
, która to pobiera uchwyty, przypisuje je do różnych zmiennych i wywołuje na nich Assign
(jest ich pięć, wszystkie typu Text
).
A rozwiązanie problemu jest banalne , po zwolnieniu konsoli "FreeConsole " trzeba dodać ReWrite
Sprawdź pod menedżerem pamięci czy taki kod nie powoduje wycieków pamięci.