使用WinAPI WriteConsole控制台输出

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

这是一个GUI应用程序,您强制它像控制台应用程序一样。 我猜测cmd.exe(或者父母的任何东西)变得困惑,因为你们都认为你“拥有”标准输出。

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

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