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


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

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

回答の条件
  • 1人2回まで
  • 登録:2009/11/16 16:20:01
  • 終了:2009/11/17 13:44:54

ベストアンサー

id:standard_one No.1

standard_one回答回数252ベストアンサー獲得回数232009/11/16 17:04:42

ポイント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

standard_one回答回数252ベストアンサー獲得回数232009/11/16 17:04:42ここでベストアンサー

ポイント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

mattn回答回数104ベストアンサー獲得回数232009/11/16 17:09:57

ポイント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

azuco1975回答回数613ベストアンサー獲得回数162009/11/16 20:43:30

ポイント5pt

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

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

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

ほぼ不可能です。

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

id:RESTfulJapan

不可能ですか…。

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

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

2009/11/17 13:43:48

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません