簡體   English   中英

將STDIN與AllocConsole()一起使用

[英]Using STDIN with an AllocConsole()

我有一個第三方dll,我加載到不是我的軟件,我正在使用AllocConsole()創建標准的Windows CLI窗口,所以我有一個簡單的方法輸出調試消息。

我的問題是,它忽略了任何類型的輸入。 我只是希望能夠使用我分配的控制台,並使我能夠給它一些輸入。

感謝Ben Voigt,通過執行以下操作,我可以讓控制台在分配后獲取輸入:

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

這也會將stdout和strerr指向同一個控制台窗口,以防它們出於某種原因被指向其他地方。

這就是我使用的。

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

希望這有助於某人。

你是否也將stdoutstderr重定向到你的控制台?

我使用此代碼從Windows應用程序訪問JavaVM輸出。

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 );
    }

在此之后,我可以看到VM的所有stdoutstderr輸出。

這是適合我的代碼:

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

您可以使用CONIN$stdin執行類似的CONIN$ (當然,打開以供閱讀)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM