Генерировать вывод в командную строку
У меня есть программа, которая запускается из командной строки. Я называю это как: myexe.exe параметр. Теперь я хочу вывести сообщение в мою командную строку (например, успех или ошибка)
Я старался:
return('there is an error') --> noting is displayed
Halt(0,'there is an error') --> a Windows-message is displayed
Как я могу вывести сообщение или, возможно, некоторые другие данные?
1 ответ
Вот пример, который использует AttachConsole, GetStdHandle и WriteConsoleA и, в частности, делает это из типа приложения Clarion GUI, а не CUI, как в другом примере.
PROGRAM
HANDLE EQUATE(UNSIGNED)
DWORD EQUATE(ULONG)
BOOL EQUATE(BYTE)
VOID EQUATE(LONG)
LPVOID EQUATE(ULONG)
LPDWORD EQUATE(ULONG)
ATTACH_PARENT_PROCESS EQUATE(-1)
STD_OUTPUT_HANDLE EQUATE(-11)
MAP
MODULE('API')
AttachConsole(DWORD dwProcessId),BYTE,PASCAL,RAW
FreeConsole(),BYTE,PROC,PASCAL,RAW
GetStdHandle(DWORD nStdHandle),LONG,PASCAL,RAW
WriteConsoleA( |
HANDLE hConsoleOutput, |
VOID lpBuffer, |
DWORD nNumberOfCharsToWrite, |
*LPDWORD lpNumberOfCharsWritten, |
LPVOID lpReserved),BYTE,PASCAL,RAW,PROC
END
WriteLine PROCEDURE(STRING pMessage)
END
Window WINDOW('Test WriteConsole'),AT(,,101,43),GRAY,FONT('Microsoft Sans Serif',8)
BUTTON('Write To Stdout'),AT(17,12),USE(?ButtonTest)
END
CODE
Open(Window)
ACCEPT
IF Event() = EVENT:Accepted AND Accepted() = ?ButtonTest
WriteLine('Hi!')
END
END
WriteLine PROCEDURE(STRING pMessage)
conHandle HANDLE
outLen LPDWORD
bufferStr &CSTRING
CODE
bufferStr &= New(CSTRING(Len(pMessage)+2))
bufferStr = pMessage & '<10><0>'
IF AttachConsole(ATTACH_PARENT_PROCESS)
conHandle = GetStdHandle(STD_OUTPUT_HANDLE)
WriteConsoleA(conHandle,Address(bufferStr),LEN(bufferStr),outLen,0)
FreeConsole()
END
Dispose(bufferStr)
RETURN