C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: Windowsアプリで標準エラー出力を取得したい


(過去ログ 87 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■52006 / inTopicNo.1)  Windowsアプリで標準エラー出力を取得したい
  
□投稿者/ デザパタ (18回)-(2010/07/29(Thu) 10:41:30)

分類:[C/C++] 

お世話になってます。

題の通り、Windowsアプリで標準エラー出力を取得したいんですがどのようにしたら取れますか?
引用返信 編集キー/
■52007 / inTopicNo.2)  Re[1]: Windowsアプリで標準エラー出力を取得したい
□投稿者/ よねKEN (555回)-(2010/07/29(Thu) 10:59:29)
よねKEN さんの Web サイト
#検証はしていません。やったことないし。

> 題の通り、Windowsアプリで標準エラー出力を取得したいんですがどのようにしたら取れますか?

分類がC/C++になっていますが、どっちでしょう?
Cなら、stdio.hにあるstderrとか、WindowsAPIのGetStdHandle関数とかでしょうか?

GetStdHandle関数
http://msdn.microsoft.com/ja-jp/library/cc429347.aspx
引用返信 編集キー/
■52009 / inTopicNo.3)  Re[2]: Windowsアプリで標準エラー出力を取得したい
□投稿者/ デザパタ (20回)-(2010/07/29(Thu) 11:23:22)
2010/07/29(Thu) 11:47:39 編集(投稿者)

#誤字があったので修正

No52007 (よねKEN さん) に返信
> #検証はしていません。やったことないし。
>
>>題の通り、Windowsアプリで標準エラー出力を取得したいんですがどのようにしたら取れますか?
>
> 分類がC/C++になっていますが、どっちでしょう?
> Cなら、stdio.hにあるstderrとか、WindowsAPIのGetStdHandle関数とかでしょうか?
>
> GetStdHandle関数
> http://msdn.microsoft.com/ja-jp/library/cc429347.aspx

お早い回答ありがとうございます。

Cですね。すいません。
HANDLE err = GetStdHandle(STD_ERROR_HANDLE);
fprintf(stderr, "エラー発生");
ReadFile(err, buffer, size, &len, NULL);
みたいな感じでやってみたんですが、なんもbufferに入りませんね。
何か間違っているのかな。。
引用返信 編集キー/
■52010 / inTopicNo.4)  Re[3]: Windowsアプリで標準エラー出力を取得したい
□投稿者/ デザパタ (21回)-(2010/07/29(Thu) 11:27:56)
あ、誤解を招きそうなのでつけたします。
Windowsアプリケーションと書きましたが、これはコンソールアプリじゃなくてWinMainで始まるアプリのことを指しています。
引用返信 編集キー/
■52011 / inTopicNo.5)  Re[4]: Windowsアプリで標準エラー出力を取得したい
□投稿者/ 囚人 (521回)-(2010/07/29(Thu) 11:31:30)
「標準エラー出力を取得」ってどういう意味で言ってるのかな?
自分が標準エラー出力に出力した内容を、また自分がその内容を取得したいってことですかね?

引用返信 編集キー/
■52015 / inTopicNo.6)  Re[5]: Windowsアプリで標準エラー出力を取得したい
□投稿者/ 774RR (522回)-(2010/07/29(Thu) 11:36:10)
うん、デザパタ氏の発言に主語が無いので何がしたいのかわからない。

誰が標準エラー出力に出した内容を、誰が取得するのか?

標準入出力はパイプなので、パイプ詰め込み側は詰め込むだけ、パイプ取り出し側は取り出すだけ。
自アプリが詰め込む内容を、自アプリで取り出すことは通常出来ないっす。そんな必要もないし。

引用返信 編集キー/
■52016 / inTopicNo.7)  Re[5]: Windowsアプリで標準エラー出力を取得したい
□投稿者/ デザパタ (22回)-(2010/07/29(Thu) 11:40:19)
No52011 (囚人 さん) に返信
> 「標準エラー出力を取得」ってどういう意味で言ってるのかな?
> 自分が標準エラー出力に出力した内容を、また自分がその内容を取得したいってことですかね?
>

そうです。
例えば自分がエラー内容を標準エラー出力に書き出しているライブラリ(別に関数でもいいんですが)を利用している立場だとして、
そのエラー内容を見たいということです。

利用する側をコンソールアプリで作れば見れるかと思うんですが、ちょっとそれは厳しそうな環境にありまして
簡単に取得できないものかと。
引用返信 編集キー/
■52018 / inTopicNo.8)  Re[6]: Windowsアプリで標準エラー出力を取得したい
□投稿者/ デザパタ (23回)-(2010/07/29(Thu) 11:44:14)
No52015 (774RR さん) に返信
> うん、デザパタ氏の発言に主語が無いので何がしたいのかわからない。
>
> 誰が標準エラー出力に出した内容を、誰が取得するのか?
>
> 標準入出力はパイプなので、パイプ詰め込み側は詰め込むだけ、パイプ取り出し側は取り出すだけ。
> 自アプリが詰め込む内容を、自アプリで取り出すことは通常出来ないっす。そんな必要もないし。
>

囚人さん、774RRさんありがとうございます。

上のレスで回答になっていますでしょうか?
引用返信 編集キー/
■52019 / inTopicNo.9)  Re[7]: Windowsアプリで標準エラー出力を取得したい
□投稿者/ とっちゃん (536回)-(2010/07/29(Thu) 11:53:09)
とっちゃん さんの Web サイト
No52018 (デザパタ さん) に返信

出力した内容を取り込んで何かをするのではなくて、単に見れればいいのでしょうか?

なら、アプリケーション起動時に、AllocConsole() してコンソール画面を作り出すことで見れるようになるかもしれません。
その代りデバッグ専用で割り切って使うことになると思いますが。
#ちょっと操作ミスるとクラッシュするしw

引用返信 編集キー/
■52020 / inTopicNo.10)  Re[8]: Windowsアプリで標準エラー出力を取得したい
□投稿者/ デザパタ (24回)-(2010/07/29(Thu) 11:57:48)
No52019 (とっちゃん さん) に返信
> ■No52018 (デザパタ さん) に返信
>
> 出力した内容を取り込んで何かをするのではなくて、単に見れればいいのでしょうか?
>
> なら、アプリケーション起動時に、AllocConsole() してコンソール画面を作り出すことで見れるようになるかもしれません。
> その代りデバッグ専用で割り切って使うことになると思いますが。
> #ちょっと操作ミスるとクラッシュするしw
>

回答ありがとうございます。
AllocConsole() してコンソール画面を作り出すことには成功しましたが、出力しても何も表示されません。
出力にはfprintfを使っています。

引用返信 編集キー/
■52023 / inTopicNo.11)  Re[9]: Windowsアプリで標準エラー出力を取得したい
□投稿者/ デザパタ (25回)-(2010/07/29(Thu) 12:17:29)
2010/07/29(Thu) 12:23:21 編集(投稿者)

No52020 (デザパタ さん) に返信
> ■No52019 (とっちゃん さん) に返信
>>■No52018 (デザパタ さん) に返信
>>
>>出力した内容を取り込んで何かをするのではなくて、単に見れればいいのでしょうか?
>>
>>なら、アプリケーション起動時に、AllocConsole() してコンソール画面を作り出すことで見れるようになるかもしれません。
>>その代りデバッグ専用で割り切って使うことになると思いますが。
>>#ちょっと操作ミスるとクラッシュするしw
>>
>
> 回答ありがとうございます。
> AllocConsole() してコンソール画面を作り出すことには成功しましたが、出力しても何も表示されません。
> 出力にはfprintfを使っています。
>

AllocConsole()したあとに、
freopen("CONOUT$", "w", stderr);
とすることで見れました。
まだ、ライブラリ内で出力しているはずのものは見えていないのですが(もしかしたら別スレッドで行われているのかも)
とりあえず、質問の目的は達成できましたので、解決とさせていただきます。
ありがとうざいました。

#追記
別スレッドとかは関係なく、単にライブラリがロギング機能をON/OFFできるようになっていてOFFになっていただけでした。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -