コマンド ライン引数を受け入れる 2 つの実行可能ファイルを作成しました。ここで、C++ (Windows で実行) を使用して、利用可能な実行可能ファイルに引数を渡したいと考えています。それを行う最良の方法は何ですか?
私は使用し CreateProcess()
ました; 静的入力では問題なく動作していますが、CLI から動的に入力したいと考えています。
コマンド ライン引数を受け入れる 2 つの実行可能ファイルを作成しました。ここで、C++ (Windows で実行) を使用して、利用可能な実行可能ファイルに引数を渡したいと考えています。それを行う最良の方法は何ですか?
私は使用し CreateProcess()
ました; 静的入力では問題なく動作していますが、CLI から動的に入力したいと考えています。
CreateProcess
文字列引数は起動時に経由で送信できることをすでに理解しているように聞こえます。実行時にデータを送信し続ける場合は、いくつかのオプションがあります。
コンソールリダイレクトを使用します。すでにWin32APIを使用しているので、子プロセスを起動した後でcinに書き込むのはそれほど簡単ではありません。このMSDNの記事を参照してください。これは、「 CLIを介して動的に入力する」という意味かもしれないと思います。
ある種のIPCを使用します。これを行うには、メッセージキューなどのWin32の方法と、 Protocol Buffers、Thrift、Boost.Interprocessなどのプラットフォームに依存しない方法があります。
IPCに関しては、猫の皮を剥ぐ方法は実際には複数あります。目標は、調査を行い、プロセスがどのように通信するかについて、早い段階で正しい設計上の決定を下したことを確認することです。
小さな問題を解決するために、コンソールリダイレクトのようなものではなく、より本格的なIPCを使用することにした場合、自分自身に尋ねるべきいくつかの質問は次のとおりです。
そして、常に現れる2つの大きな質問は次のとおりです。
うまくいけば、この回答はあなたの質問にとってやり過ぎではありません。
私は通常使用system(const char*)
し、それは私のために働きます:)
コマンドラインに入力するコマンドを含む文字列を渡します。あなたの場合、それはexeファイルへのパスとそれが取る引数を意味し、その間にスペースがあります。コマンドラインから実行されたかのように、指定されたプロセスを実行します。
コマンドライン (引数付き) は、CreateProcess() のパラメーターの 1 つです。子実行可能ファイルに渡したい引数をそこに入れるだけです。
非静的入力でどのような問題がありますか?