7

自分のものではないソフトウェアにロードするサードパーティの dll があり、AllocConsole() を使用して標準の Windows CLI ウィンドウを作成しているので、デバッグ メッセージを簡単に出力できます。

私の問題は、それがあらゆる種類の入力を無視することです。割り当てたコンソールを使用して、何らかの入力を行えるようにしたいだけです。

4

4 に答える 4

2

stdoutまた、とstderrをコンソールにリダイレクトしますか?

このコードを使用して、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からのすべてstdoutと出力を確認できます。stderr

于 2012-01-26T15:50:30.263 に答える
2

これは私のために働くコードです:

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

CONIN$おそらくandでも同様のことができますstdin(もちろん、読み取り用に開きます)。

于 2012-01-26T15:59:30.163 に答える
2

これは私が使用するものです。

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

これが誰かに役立つことを願っています。

于 2018-04-19T21:44:30.053 に答える