Using STDIN with an AllocConsole()

前端 未结 4 1833
北荒
北荒 2021-01-05 06:00

I have a third-party dll that I load into software that isn\'t mine, and I\'m using AllocConsole() to create the standard windows CLI window so I have an easy means of outpu

相关标签:
4条回答
  • 2021-01-05 06:36

    Thanks to Ben Voigt, I was able to cause the console to take input after I allocated it by doing:

    freopen("CONIN$", "r", stdin); 
    freopen("CONOUT$", "w", stdout); 
    freopen("CONOUT$", "w", stderr); 
    

    This also directs the stdout and strerr to the same console window, in case they are directed someplace else for some reason.

    0 讨论(0)
  • 2021-01-05 06:39

    This is what I use.

        FILE *file = nullptr;
    freopen_s(&file,"CONIN$", "r", stdin);
    freopen_s(&file, "CONOUT$", "w", stdout);
    

    Just hopes this helps someone.

    0 讨论(0)
  • 2021-01-05 06:45

    This is the code that works for me:

    freopen("CONOUT$", "w", stdout);
    

    You can probably do something similar with CONIN$ and stdin (Open for read, of course).

    0 讨论(0)
  • 2021-01-05 06:55

    Do you also redirect the stdoutand stderrto your console?

    I used this code to get access to the JavaVM output from a Windows app.

    if(::AllocConsole())
        {
            int hCrt = ::_open_osfhandle((intptr_t) ::GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
            FILE *hf = ::_fdopen( hCrt, "w" );
            *stdout = *hf;
            ::setvbuf(stdout, NULL, _IONBF, 0 );
    
            hCrt = ::_open_osfhandle((intptr_t) ::GetStdHandle(STD_ERROR_HANDLE), _O_TEXT);
            hf = ::_fdopen( hCrt, "w" );
            *stderr = *hf;
            ::setvbuf(stderr, NULL, _IONBF, 0 );
        }
    

    After this I can see all stdoutand stderr outputs from the VM.

    0 讨论(0)
提交回复
热议问题