Консольный вывод с WinAPI WriteConsole - PullRequest
4 голосов
/ 21 марта 2012

Я пытаюсь сделать привет мир с функциями winapi.Это вроде работает, но я бы хотел, чтобы все было сделано правильно.

Итак, я получил такой код:

int main(){
    HANDLE std_out;
    int i;
    char *error_msg;

    std_out = GetStdHandle(STD_OUTPUT_HANDLE);

    if(std_out == INVALID_HANDLE_VALUE){
        MessageBox(NULL,"stdout not available","Error",MB_OK);
        return 1;
    }

    AttachConsole(ATTACH_PARENT_PROCESS);

    if(!WriteConsoleA(std_out,"hhh\n",4,&i,NULL)){
        FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,NULL,GetLastError(),0,&error_msg,4,NULL);
        MessageBox(NULL,error_msg,"Error",MB_OK);
    }

    return 42;
}

Также я немного экспериментирую, поэтому я связываюсь с/ entry: main / subsystem: windows

тогда вывод будет выглядеть следующим образом:

%PATH_TO_WORKING_DIR%>hhh(CRLF)

, затем он ждет, пока я не нажму RETURN, и затем программа завершится, что, как вы, вероятно, согласитесь, очень чушь"Привет, мир".Любые идеи о том, как избавиться от этого PWD и необходимости нажимать на возврат, очень приветствуются, спасибо за чтение.

1 Ответ

3 голосов
/ 21 марта 2012

Это приложение с графическим интерфейсом, которое вы заставляете действовать как консольное приложение. Я предполагаю, что cmd.exe (или кто-то из родителей) запутался, так как вы оба думаете, что у вас "собственный" стандартный вывод.

Ссылка с / SUBSYSTEM: CONSOLE и проблемы должны исчезнуть (и тогда вам не нужно / ENTRY или вызов AttachConsole)

Если вам действительно нужен гибридный интерфейс с графическим интерфейсом и консолью, вам нужно вызвать AllocConsole, когда консоли нет (запущено из Проводника и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...