自分のものではないソフトウェアにロードするサードパーティの dll があり、AllocConsole() を使用して標準の Windows CLI ウィンドウを作成しているので、デバッグ メッセージを簡単に出力できます。
私の問題は、それがあらゆる種類の入力を無視することです。割り当てたコンソールを使用して、何らかの入力を行えるようにしたいだけです。
自分のものではないソフトウェアにロードするサードパーティの dll があり、AllocConsole() を使用して標準の Windows CLI ウィンドウを作成しているので、デバッグ メッセージを簡単に出力できます。
私の問題は、それがあらゆる種類の入力を無視することです。割り当てたコンソールを使用して、何らかの入力を行えるようにしたいだけです。
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
これは私のために働くコードです:
freopen("CONOUT$", "w", stdout);
CONIN$
おそらくandでも同様のことができますstdin
(もちろん、読み取り用に開きます)。
これは私が使用するものです。
FILE *file = nullptr;
freopen_s(&file,"CONIN$", "r", stdin);
freopen_s(&file, "CONOUT$", "w", stdout);
これが誰かに役立つことを願っています。