- ベストアンサー
ShellExecuteを用いてプログラムを走らせる
ボタンを押すと,ShellExecuteで外部プログラム は起動できる状態なのですが,perlのインタプリタが 走りません. openとしているだけなので,(.pl)の 拡張子ファイルを開いているだけかも しれませんが.一応デフォルトで(.pl)ファイル をダブルクリックするとPerl Command Line Interpreterが起動するようになっています. 外部プログラムの実行でプログラムを走らせる ことは可能なのでしょうか.そしてその手段は どのようなものがあるのでしょうか.よろしく お願いいたします.
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
返値ret01のエラーコードは何でしたか? 例示して頂いたコードから推測出来る事は、 ・"z:\\perl_change\\jisyo01.pl"が無い ・引数SW_HIDEが、Perlインタプリタにとって正しく動く値ではない ・実は拡張子plが、Perlインタプリタに関連付けされていなかった といった感じです。 >ShellExecuteが最適だという情報は安心しました 「文書ファイルを関連付けされたソフトで起動」というのは、ShellExecute()とShellExecuteEx()でのみ出来ると思います。
その他の回答 (1)
- rigidbody
- ベストアンサー率60% (20/33)
ShellExecute()に、どんな引数を渡しているか教えて頂けないでしょうか?でないと回答が難しいです。 >ダブルクリックするとPerl Command Line Interpreterが起動 では、"open"コマンドでperlインタプリタが起動するはずです。 >外部プログラムの実行でプログラムを走らせることは可能なのでしょうか 可能です。 >手段はどのようなものがあるのでしょうか. ShellExecute()の他、CreateProcess()等 沢山あります。単に起動するだけなら、ANSI-C標準関数のsystem()があります。単純かつ標準語であるのが長所です。( 中でCreateProcess()を使用 ) 今回の場合は、ShellExecute()が最適だと思います。
お礼
ありがとうございます。 プログラムの起動ができるという情報と、ShellExecuteが最適だという情報は安心 しました。
補足
void CModel05View::OnMyButton1() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください HINSTANCE ret01 = ShellExecute(m_hWnd, "open", "z:\\perl_change\\jisyo01.pl", NULL, NULL,SW_HIDE); } というものを渡しています。 jisyo01.plを実行することにより、ファイルが作成(更新)されるはずなのですが作成(更新)されていません。 私はインタプリタが起動していないと判断しています。
お礼
2回目の素早い返答ありがとうございます。 rigidbodyさんの回答を参考に改良を加えて いきたいと思います。 丁寧な回答ありがとうございました。