- ベストアンサー
他のプログラムの呼び方について
GUIのプログラムと(Gui.exe)、計算をするプログラム(Calc.exe)がありまして、 GUIのプログラムからパラメータを入力し、そのパラメータにしたがって計算をするんですが、Gui.exeからCalc.exeを呼ぶにはどのようにすればいいんでしょうか? 2つのプログラムを同じディレクトリにおいて、system("Calc.exe hoge1 hoge2")のようにすればいいのかな、思ったのですが、どうもだめなようです。Calc.exeのパスを指定すればいいようなのですが、どのように指定すればいいかわかりません。 また、今は2つのexeファイルがあるのですが、これを一つのexeファイルにまとめるようなことって出来るのでしょうか? 開発環境はVC++6.0,Windows XPです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス >Gui.exeからCalc.exeを呼ぶにはどのようにすればいいんでしょうか? ↑ system() 関数でもシェル API 関数の ShellExecute() でも出来ます。 ShellExecute() 関数の場合は ShellExecute( hWnd, TEXT("open"), TEXT("Calc.exe"), TEXT("hoge1 hoge2"), NULL, SW_SHOWNORMAL ); で起動できます。 >2つのプログラムを同じディレクトリにおいて、system("Calc.exe hoge1 hoge2")のようにすればいいのかな、 >思ったのですが、どうもだめなようです。 ↑ カレントディレクトリを設定してみたらどうでしょうか。 chdir()、SetCurrentDirectory() 関数で設定できます。 http://nienie.com/~masapico/api_SetCurrentDirectory.html→『SetCurrentDirectory』 >また、今は2つのexeファイルがあるのですが、 >これを一つのexeファイルにまとめるようなことって出来るのでしょうか? ↑ 両方のソースを持っていれば1つに出来ると思いますが…。 Gui.exe、Calc.exe は自作したものですか? 自作のものなら Gui.exe が GUI のプログラムだと思いますので Calc.exe の処理を関数などに 作り変えてその関数を GUI プログラムから呼び出せばよいだけです。 ・そもそも Calc.exe はどんな計算を行うのでしょうね。不明です。 引数を元に計算するだけなら関数にコマンドラインと同じ引数を受け取れるような仕組みに 作り変えるだけです。 ・Gui.exe でカレントディレクトリを Calc.exe のあるフォルダにパス設定すれば動くと思います。 ・以上。
その他の回答 (2)
- aris-wiz
- ベストアンサー率38% (96/252)
Windowsなら他のプロセスを起動する場合、 CreateProcessを使うことが多いです。 #参考URL参照。 >これを一つのexeファイルにまとめるようなことって出来るのでしょうか? 1つに纏めるだけならできるでしょうが、実行可能な状態で1つに するのならソースファイルの処理をきちんと直してもう一度コンパイル すれば1つになるでしょう。
- uyama33
- ベストアンサー率30% (137/450)
ret = _spawnl(_P_WAIT, ecp1, ecp1, eck1, ecpath0, ecpath1,NULL); とします。 昔のC言語の関数です。 VC++6.0から呼び出せます。 _spawnl について調べてください
お礼
結局、GetModuleNameで実行ファイルのパスを特定して、同じパスのCalc.exeを実行すればうまくいきました。 今回は、Calc.exeのソースをいじれなかったので、2つのexeファイルのままにしました。 ありがとうございました。