2012-01-16 6 views
2

私は複雑な>> cygwin < <ウィンドウアプリケーション(別名サブシステムウィンドウ)を持っており、デバッグコンソールを追加したいと思います。私はすでに次の亜種を試してみましたが、私のためにはうまくいきません。AllocConsole + Stdoutはcygwinでリダイレクトする

コンソールのタイトルは変更されていますが、デッドブラックのままです。出力は表示されません。

変法1)

ok = AllocConsole(); 
if (ok) { 
    h = GetStdHandle(STD_OUTPUT_HANDLE); 
    fd = _open_osfhandle((intptr_t)h, O_TEXT); 
    fp = _fdopen(fd, "w"); 
    *stdout = *fp; 
    setvbuf(stdout, NULL, _IONBF, 0); 
    fprintf(stdout, "Hello worldd\n"); 
    SetConsoleTitle("VM Debug"); 
} 

バリアント2)

freopen("conout$","w",stdout); 
fprintf(... 

バリアント3)

freopen("/dev/conout","w",stdout); 
fprintf(... 

これは、すでに何回も回答されているかもしれませんが、解決策のどれものために働いていません私。

誰でもお手伝いできますか?

しかし、cygwinの問題である必要があります。サイクロンソリューションが必要です.MSVCまたはBorlandCの下で動作することがわかっています。 cygwinが壊れていて、解決策がないと言っても、どんな答えでも役に立ちます。

+1

サブシステムをコンソールに変更するだけで、コンソールウィンドウが無料で表示されます。メインメソッドにWinMain()を呼び出します。 –

+0

両方のモードで1つのexeしか持たず、 "-console"引数が与えられている場合にだけコンソールが表示する必要があります。だから私はそれを動的にやりたいのです。 – blabla999

+0

ここで何をしたのですか?私は同じことをしようとしていて、それはイライラしています。 –

答えて

1

はい、cygwinの問題です。 Cygwinの人たちは、実際にはできるだけ多くの "unix"環境をシミュレートするために努力してきました。そのため、W32の一般的なトリックは機能しません。とにかく、新しいコンソールにWriteConsole関数を使ってメッセージを書き込むことはできますが、それはあなたが望むものではありません。過去に私は同様の問題を抱えていました。これは、pipe()を作成してstdout/stderrにリダイレクトし、パイプエンドから文字を受け取ったスレッドを作成してWriteConsole経由で新しいコンソールに書き込んだものです。簡単ではありません。

また、Cygwinのコンソール管理はさまざまなバージョンで何度も変更されていると思いますので、1つのバージョンで動作するように見えるトリックは別のバージョンで動作しなくなる可能性があります。

これは野生の世界です...

関連する問題