人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

●質問者: RESTfulJapan
●カテゴリ:コンピュータ インターネット
✍キーワード:C++ C言語 Ruby パラメータ プログラム
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● standard_one
●50ポイント ベストアンサー

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ですかね?)。

◎質問者からの返答

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

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


2 ● mattn
●25ポイント

各言語それぞれに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言語から呼び出す処理を持っています。


3 ● azuco1975
●5ポイント

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

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

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

ほぼ不可能です。

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

◎質問者からの返答

不可能ですか…。

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ