- ベストアンサー
あるexeファイルを実行するexeファイルを作りたい
いつもお世話になってます。 前回、http://okwave.jp/qa4949997.html にて質問させていただきました。最終的にはこのページのようなことをしたいのですが、とりあえずRubyファイルをコンパイルし、exeファイルに変換することはできました。 そこで次はそのexeファイルを実行させるC/C++コードが必要になってくるのですが、C/C++はあまり詳しくないのでよくわかりません。 ちなみにコマンド引数も使うexeファイルです。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
exeファイルを実行させたいということでしょうか? 「Exerb」というコンパイラは分からないので、 使えるかどうかは分からないのですが、 API関数に、 ShellExecute(); http://msdn.microsoft.com/ja-jp/library/cc422072.aspx CreateProcess(); http://msdn.microsoft.com/ja-jp/library/cc429066.aspx WinExec(); http://msdn.microsoft.com/ja-jp/library/cc429435.aspx という関数があります。
その他の回答 (4)
- asuncion
- ベストアンサー率33% (2127/6289)
Rubyで書かれたコードが、例えば10+20を計算するものだったとします(あくまで例です)。 それをコンパイルしてできあがったexeファイルがあるのですよね。 それを、C/C++から実行するようなコードを書いたとしても、 そのC/C++プログラムは、exeファイルを実行するためのもので、 10+20を計算するコードが書いてあるわけではないですよね。 ところが、 >ソースをc/cppで欲しいと言われている その方は、10+20を計算するコードをC/C++でほしい、とおっしゃっているのですよね。 ということは、Rubyで書いたexeファイルをC/C++から実行するコードを書いたとしても、 その方の目的を達成できないのではないでしょうか。
お礼
確かにそのとおりですね。 とりあえずAPI関数でやってみてうまくいかなかったらc/c++で書いていくしかないと思ってます。 ありがとうございました。
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19841)
「exeファイル」と言う単語が出てきてますので、実行環境は Windows か MS-DOS だろうと仮定します(実行環境を尋ねるまでもないですよね?) 普通 Windows で Ruby を扱う際にはコマンドプロンプトを用います。 なので、Ruby を起動するCで書いたプログラムも、コンソールアプリケーションとして作成し、コマンドプロンプトで動かします。 コンソールアプリケーションで外部コマンドを起動する最も簡単な方法は「system関数を呼ぶ」です。 #include <stdlib.h> int main(int argc,char *argv[]) { int Result; Result = system("ruby 'ruby_pro.rb'"); } このプログラムは、Ruby.exe(Ruby 本体)がパスの通った所にある状態で、コマンドプロンプトで ruby 'ruby_pro.rb' と打ち込んで Ruby を起動したのと同等の事をします。 もし、コマンドプロンプトで ruby 'ruby_pro.rb' と打ち込んで コマンドまたはファイル名が違います. と表示された時は、Ruby にパスが通ってなくて起動できないので、Ruby にパスを通して下さい。 ただし、system関数の場合、中間にシェルが入る為に実行環境に依存しているので、起動したコマンドから返された戻り値や、コマンドが起動できなかった時の戻り値が呼び出し元に正しく返されて来ない場合があります。 詳細な戻り値が欲しい場合は、system関数を呼ばず、Ruby.exe を「直接起動」しなければなりません。もちろん、その場合、自分でパス変数を追いかけて Ruby.exe を探し出し、フルパス指定で Ruby.exe を起動しなければなりません(つまり、自分で、シェルがやっているのと同じ事をしないとならない)
補足
親切な解答、誠にありがたいのですが、やりたいことは少し違うようです。 Ruby環境がなくてもRubyで作ったプログラムを動かせるようにするためにexeファイルを作ったのですが、そのexeファイルをc/c++で実行させるようにしたいということです。 ソースをc/cppで欲しいと言われているのですが、そのプログラムをrbで作ってしまったのでどうすればいいか悩んでいる次第です。 c/cppで作りなおせと言われたらそれでおしまいですが・・
- asuncion
- ベストアンサー率33% (2127/6289)
>Rubyファイルをコンパイルし、exeファイルに変換することはできました。 この話と >そこで次はそのexeファイルを実行させるC/C++コードが必要になってくる この話は、どう結びつくのでしょうか? Rubyファイルをコンパイルして作ったexeファイルを、直接実行することはできないのでしょうか?
お礼
つまり、Rubyで書いたコードの内容をC/C++で実行できるようにしたい、ということです。 そうなるとexeファイルを作るしかないらしいので、そうしました。。
- Yanch
- ベストアンサー率50% (114/225)
環境とか書かれてませんが、 OSは? コンパイラは? 何を使っていますか。 C言語から、外部コマンドを実行するなら、 int system(const char *command);関数が使えるかも。
補足
説明不足で申し訳ございません。 OS: windows vista コンパイラ: Exerb です。
お礼
これは探していたものにかなり近いものです! ぜひ使ってみたいと思います。ありがとうございました。