您能否解释一下,API函数AllocConsole
和AttachConsole(-1)
有什么区别?我的意思是如果AttachConsole
得到ATTACH_PARENT_PROCESS(DWORD)-1
。
最佳答案
好吧,根本的区别是:
AllocConsole()
将创建一个新控制台(并附加到它)AttachConsole( ATTACH_PARENT_PROCESS /* -1 */)
将不会创建新的控制台,它将附加到父进程的现有控制台。 在第一种情况下,您将获得一个全新的控制台窗口,在第二种情况下,您将使用现有的控制台窗口。
当然,如果您已经连接到控制台(即,您是从cmd.exe启动的控制台模式程序),则没有太大区别-两种API都会产生错误。
还要注意,仅因为与控制台分离并不意味着分离的控制台会有用-例如,如果您是从cmd窗口启动的控制台进程,则该窗口实际上会阻塞,直到您的进程结束。
一些可玩的代码:
int main( int argc, char* argv[])
{
int ch;
BOOL bResult;
printf( "default console\n");
ch = getchar();
bResult = FreeConsole();
bResult = AllocConsole();
printf( "AllocConsole()\n");
ch = getchar();
bResult = FreeConsole();
bResult = AttachConsole( ATTACH_PARENT_PROCESS);
printf( "AttachConsole( ATTACH_PARENT_PROCESS)\n");
ch = getchar();
return 0;
}
关于c# - API函数AllocConsole和AttachConsole(-1)有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/432832/