C言語(C++言語)で、他の言語のプログラムを呼び出すにはどうしたらいいでしょうか?


C言語(C++言語)で他人が作った大規模なプログラムの一部を書き換えたいのですが、自分はC言語を苦手としておりますので、一部を書き換えてRubyなんかの別のプログラムに引数を渡して呼び出す実装にしたいのです。
(つまり必要なパラメータだけ抜き取って、あとはRubyで実装したい。)

プログラムはかなりの初心者だと思っておりますので、できれば詳細な情報をよろしくお願い致します。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/11/17 13:44:54
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:standard_one No.1

回答回数252ベストアンサー獲得回数23

ポイント50pt

Rubyに限らずコマンドラインから呼び出す形にすればいけるはずです。

一番お手軽なのはsystem関数です(exec関数でも可)。

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char **argv)

{

int a;

char b[10];

char buf[256];

a=1;

strcpy(b, "aaa");

// 引き継ぎたい値をコマンドラインに展開

sprintf(buf, "ruby ./hoge.rb %d %s", a, b);

// コマンドラインで ruby ./hoge.rb 1 aaa を叩くのと大体同じ意味

system(buf);

// C側は終了

exit(0);

}

あとは呼び出されたプログラム側でargvとargcを参照すればOKです(RubyだとARGVですかね?)。

id:RESTfulJapan

これでとりあえず自分の思ってたことはできました!

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

2009/11/17 13:41:16

その他の回答2件)

id:standard_one No.1

回答回数252ベストアンサー獲得回数23ここでベストアンサー

ポイント50pt

Rubyに限らずコマンドラインから呼び出す形にすればいけるはずです。

一番お手軽なのはsystem関数です(exec関数でも可)。

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char **argv)

{

int a;

char b[10];

char buf[256];

a=1;

strcpy(b, "aaa");

// 引き継ぎたい値をコマンドラインに展開

sprintf(buf, "ruby ./hoge.rb %d %s", a, b);

// コマンドラインで ruby ./hoge.rb 1 aaa を叩くのと大体同じ意味

system(buf);

// C側は終了

exit(0);

}

あとは呼び出されたプログラム側でargvとargcを参照すればOKです(RubyだとARGVですかね?)。

id:RESTfulJapan

これでとりあえず自分の思ってたことはできました!

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

2009/11/17 13:41:16
id:mattn No.2

回答回数104ベストアンサー獲得回数23

ポイント25pt

各言語それぞれにC言語から呼び出す術が異なります。

rubyであれば

http://maspon.wordpress.com/2009/09/20/cc-dynamic-ruby/

perlであれば

http://perldoc.perl.org/perlembed.html#Calling-a-Perl-subroutine...

といった様になります。

簡単にネットから探す方法としては apache のモジュール、mod_xxx に言語名を指定してググるか(mod_ruby/mod_perl)、embedというキーワードをつけると見つけやすいです。

またvimというテキストエディタが複数言語をC言語から呼び出す処理を持っています。

id:azuco1975 No.3

回答回数613ベストアンサー獲得回数16

ポイント5pt

>C言語(C++言語)で他人が作った大規模なプログラムの一部を書き換えたいのですが、

>自分はC言語を苦手としておりますので、一部を書き換えてRubyなんかの別のプログラムに引数を

>渡して呼び出す実装にしたいのです。

ほぼ不可能です。

Rubyでかいて、それをC言語風に書き直すか誰かに書き直してもらうほうが現実的です。

id:RESTfulJapan

不可能ですか…。

恐らく上述のsystem関数を使うように、間接的に呼び出すやり方しかなく、

直接的に呼び出す方法は無いという意味でしょうか…。

2009/11/17 13:43:48

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません