您能否解释一下,API函数AllocConsoleAttachConsole(-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/

    10-13 06:30