プロが教える店舗&オフィスのセキュリティ対策術

VC++のコード上で.batファイルを実行する必要が出てきたのですが、
VC++で外部ファイルを実行、その結果を受け取るにはどうすればよいのでしょうか?

ちなみに使用しようと思っているバッチファイルは、juliusという音声認識エンジンです。
1.go.batからjulius.exeが起動
2.「### read waveform input enter filename->」と言う記述が出てくるので、wavファイルのファイル名を指定してエンター
3.#sentence1: ついに 、 他 団体 戦 。
#wseq1: <s> ついに:ツイニ:ついに:503 、:、:、:10 他:タ:他:188 団体:ダンタイ:団体:
#507 戦:セン:戦:520 。:。:。:8 </s>
#phseq1: silB | ts u i n i | sp | t a | d a N t a i | s e N | sp | silE
のようにcmd.exe上に結果が返ってくる。

この一連の動作を、1のファイル名をVC++上で指定し、
3のcmd.exe上で現れる分をVC++上で受け取る(CStringなりに格納する)ような方法は無いでしょうか。

もし他に良い方法をご存知の方がいましたら、教えていただければ幸いです。

A 回答 (3件)

<%1 は go.batの引数1を入力とする … キーボードからの入力をリダイレクトする



2>&1は エラー出力を標準出力にリダイレクトする

>%2 は 標準出力go.batの引数2にリダイレクトする
といった意味です

> go.bat ファイル名 出力ログファイル名
このファイル名は 解析(juliusで)処理するファイルの名前です
出力ログファイル名は C/C++側で結果を受け取るためのファイル名です

"go.bat ファイル名 出力ログファイル名"
を sawn/execなどにコマンドやパラメータとして渡してやることになります
    • good
    • 0
この回答へのお礼

希望通りに動作させることが出来ました。
ありがとうございました。

お礼日時:2008/07/24 08:21

パイプ作って子プロセスを起動すればよいですね.



ちょっと古いけど,このあたり参考になるんじゃないかな?
http://www.h4.dion.ne.jp/~fht/wptips/readprc.html
    • good
    • 0
この回答へのお礼

ANo.3の方の方法で出来ましたが、とても参考になりました。
ありがとうございます。

お礼日時:2008/07/24 08:20

まずは機能するバッチファイルを記述しましょう



go.batを
@echo off
julius.exe <%1 2>&1 >%2
といったといった具合にして

go.bat ファイル名 出力ログファイル名
で実行して出来上がる出力ログが適切なのかどうか確認しましょう

出来上がった出力ログが満足いくものであれば後はテキストファイルの処理になります

go.batの実行に関してはプログラミングスタイルに依存するともいます
Cランタイムのspawn/exec系やWinAPIのCreateProcessなど使うことになりそうです

この回答への補足

ありがとうございます、バッチファイルのログをとるということに頭が回りませんでした。

何でもかんでも聞いてしまって申し訳ないのですが、
<%1 2>&1 >%2の意味と、
go.bat ファイル名 出力ログファイル名 を記述するのはVCのコード上でなのでしょうか?
また、ファイル名とは何のファイル名ですか?

補足日時:2008/07/21 06:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A