いつもお世話になってます。

前回、http://okwave.jp/qa4949997.html にて質問させていただきました。最終的にはこのページのようなことをしたいのですが、とりあえずRubyファイルをコンパイルし、exeファイルに変換することはできました。

そこで次はそのexeファイルを実行させるC/C++コードが必要になってくるのですが、C/C++はあまり詳しくないのでよくわかりません。

ちなみにコマンド引数も使うexeファイルです。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

exeファイルを実行させたいということでしょうか?



「Exerb」というコンパイラは分からないので、
使えるかどうかは分からないのですが、
API関数に、
ShellExecute();
http://msdn.microsoft.com/ja-jp/library/cc422072 …
CreateProcess();
http://msdn.microsoft.com/ja-jp/library/cc429066 …
WinExec();
http://msdn.microsoft.com/ja-jp/library/cc429435 …
という関数があります。
    • good
    • 0
この回答へのお礼

これは探していたものにかなり近いものです!

ぜひ使ってみたいと思います。ありがとうございました。

お礼日時:2009/05/18 18:11

Rubyで書かれたコードが、例えば10+20を計算するものだったとします(あくまで例です)。


それをコンパイルしてできあがったexeファイルがあるのですよね。
それを、C/C++から実行するようなコードを書いたとしても、
そのC/C++プログラムは、exeファイルを実行するためのもので、
10+20を計算するコードが書いてあるわけではないですよね。
ところが、

>ソースをc/cppで欲しいと言われている

その方は、10+20を計算するコードをC/C++でほしい、とおっしゃっているのですよね。

ということは、Rubyで書いたexeファイルをC/C++から実行するコードを書いたとしても、
その方の目的を達成できないのではないでしょうか。
    • good
    • 0
この回答へのお礼

確かにそのとおりですね。

とりあえずAPI関数でやってみてうまくいかなかったらc/c++で書いていくしかないと思ってます。

ありがとうございました。

お礼日時:2009/05/18 18:11

「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で作りなおせと言われたらそれでおしまいですが・・

補足日時:2009/05/18 16:49
    • good
    • 0

>Rubyファイルをコンパイルし、exeファイルに変換することはできました。



この話と

>そこで次はそのexeファイルを実行させるC/C++コードが必要になってくる

この話は、どう結びつくのでしょうか?
Rubyファイルをコンパイルして作ったexeファイルを、直接実行することはできないのでしょうか?
    • good
    • 0
この回答へのお礼

つまり、Rubyで書いたコードの内容をC/C++で実行できるようにしたい、ということです。

そうなるとexeファイルを作るしかないらしいので、そうしました。。

お礼日時:2009/05/18 16:48

環境とか書かれてませんが、



OSは?
コンパイラは?

何を使っていますか。

C言語から、外部コマンドを実行するなら、
int system(const char *command);関数が使えるかも。

この回答への補足

説明不足で申し訳ございません。
OS: windows vista
コンパイラ: Exerb
です。

補足日時:2009/05/18 16:27
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング