Решение:
Declare Function AttachConsole Lib "kernel32.dll" (ByVal dwProcessId As Int32) As Boolean
Declare Function FreeConsole Lib "kernel32.dll" () As Boolean
[код .....]
при необходимости вывода на консоль вы просто вызываете AttachConsole (-1), но не забываете делать FreeConsole () в конце вашей программы.
единственная проблема с этим решением в том, что вы прочтете что-то вроде этого:
C:> yourapp.exe
C:> Привет, мир!
Это потому, что приложение форм запускается как дочерний элемент командной строки, поэтому приглашение возвращается сразу после ввода имени приложения.
В консольном приложении командная строка возвращается после выхода из программы.
Я все еще пытаюсь найти способ работать так же, как в консольном приложении.