• ベストアンサー

ShellExecuteを用いてプログラムを走らせる

ボタンを押すと,ShellExecuteで外部プログラム は起動できる状態なのですが,perlのインタプリタが 走りません. openとしているだけなので,(.pl)の 拡張子ファイルを開いているだけかも しれませんが.一応デフォルトで(.pl)ファイル をダブルクリックするとPerl Command Line Interpreterが起動するようになっています. 外部プログラムの実行でプログラムを走らせる ことは可能なのでしょうか.そしてその手段は どのようなものがあるのでしょうか.よろしく お願いいたします.

質問者が選んだベストアンサー

  • ベストアンサー
  • rigidbody
  • ベストアンサー率60% (20/33)
回答No.2

返値ret01のエラーコードは何でしたか? 例示して頂いたコードから推測出来る事は、 ・"z:\\perl_change\\jisyo01.pl"が無い ・引数SW_HIDEが、Perlインタプリタにとって正しく動く値ではない ・実は拡張子plが、Perlインタプリタに関連付けされていなかった といった感じです。 >ShellExecuteが最適だという情報は安心しました 「文書ファイルを関連付けされたソフトで起動」というのは、ShellExecute()とShellExecuteEx()でのみ出来ると思います。

Achilles1993
質問者

お礼

2回目の素早い返答ありがとうございます。 rigidbodyさんの回答を参考に改良を加えて いきたいと思います。 丁寧な回答ありがとうございました。

その他の回答 (1)

  • rigidbody
  • ベストアンサー率60% (20/33)
回答No.1

ShellExecute()に、どんな引数を渡しているか教えて頂けないでしょうか?でないと回答が難しいです。 >ダブルクリックするとPerl Command Line Interpreterが起動 では、"open"コマンドでperlインタプリタが起動するはずです。 >外部プログラムの実行でプログラムを走らせることは可能なのでしょうか 可能です。 >手段はどのようなものがあるのでしょうか. ShellExecute()の他、CreateProcess()等 沢山あります。単に起動するだけなら、ANSI-C標準関数のsystem()があります。単純かつ標準語であるのが長所です。( 中でCreateProcess()を使用 ) 今回の場合は、ShellExecute()が最適だと思います。

Achilles1993
質問者

お礼

ありがとうございます。 プログラムの起動ができるという情報と、ShellExecuteが最適だという情報は安心 しました。

Achilles1993
質問者

補足

void CModel05View::OnMyButton1() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください HINSTANCE ret01 = ShellExecute(m_hWnd, "open", "z:\\perl_change\\jisyo01.pl", NULL, NULL,SW_HIDE); } というものを渡しています。 jisyo01.plを実行することにより、ファイルが作成(更新)されるはずなのですが作成(更新)されていません。 私はインタプリタが起動していないと判断しています。

関連するQ&A

専門家に質問してみよう