使用WinAPI WriteConsole控制台输出

时间:2012-03-20 20:54:42

标签: c winapi console

我正在尝试用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然后程序终止,这可能是你很可能同意的“你好世界”。任何关于如何摆脱那个残疾人的想法和按回归的必要性都非常受欢迎,因为阅读。

1 个答案:

答案 0 :(得分:3)

这是一个强制用作控制台应用程序的GUI应用程序。我猜测cmd.exe(或者父母的任何东西)会让你感到困惑,因为你们都认为你“拥有”stdout。

链接/ SUBSYSTEM:CONSOLE并且问题应该消失(然后你不需要/ ENTRY或调用AttachConsole)

如果您确实需要GUI / Console混合,则需要在没有控制台(从Explorer等启动)时调用AllocConsole