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

異言語間の連携について
様々なプログラミング言語があって、それぞれに得意な処理や、特徴あるライブラリがありますね。
使い慣れた言語で基本的な処理をするけれど、他の言語にしかないライブラリを使うと手間が省ける・・・
ということもあります。ところが連携ってに関する情報ってなかなかないですね。

そこで、異言語間の連携でどういう方法があるのか教えてください。
「片方の言語で作った実行ファイルを他方で実行する」が基本と考えてよいですか?
これを自作する場合には、C++などの知識がいるなどと聞きますが、参考になるURLがあったら教えてください。

●質問者: yshkw
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:C++ URL ファイル プログラミング言語 ライブラリ
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● pahoo
●20ポイント

Windowsの場合、たとえば「VBとVC++の連携」では、VC++でDLLを作って、VBから呼び出すというやり方があります。

私は、ロジックの部分はgccで書いて、WebAPIの部分をPHPにするということをよくやります――Linuxの場合。「片方の言語で作った実行ファイルを他方で実行する」ということですね。


「片方の言語で作った実行ファイル」についても、即実行型でなくても、Javaでも大丈夫です。「ソケット通信によるJava―他言語プログラム連携」のような連携ができます。

◎質問者からの返答

pahooさんお久しぶりです。

・VBとVC++

・CとPHP

・JAVAと他言語

の例がとても参考になりました。

個人的には、ある言語のライブラリを連携して使うように、windowsのGUIアプリケーションで、特定の機能だけを抜き出して使えたりしないかなとよく思います。EXCELで作ってしまったマクロとか。windowsではVBやVC++などで連携するのですね。C,JAVA,C++やperlなどとの連携はできないのでしょうか?


ポイントが少なくなってしまい、あと数回答で締め切ることになりそうですが引き続きよろしくお願いします。

↑情けないことを書いていたら、どなたか100ポイントの寄付をしてくださいました。

匿名さんありがとうございます。ご期待にお答えして5/8か、ポイントなくなるまで募集することにします。


2 ● tera-p
●100ポイント ベストアンサー

大抵の言語は,動的リンク形式のライブラリ(Windows なら .dll, UNIX なら lib**.so)を利用するためのインタフェースを備えています.これらのライブラリを直接生成できる言語(典型的には C)との連携は,このインタフェース経由で行うのが一般的だと思います.

ただ,通常はこのインタフェースは結構「使うのがめんどくさい」ことが多いです.これを楽にするツールとして SWIG (http://www.swig.org/) が有名です.各種言語から(C/C++ などで書かれた)ライブラリを簡単に使えるようになります.

SWIGがサポートする言語(処理系)は,

Tcl, Python, Perl, Guile, Java, Ruby, Mzscheme, PHP, Ocaml, Pike , C#, Chicken scheme compiler, Allegro CL, Modula-3 , Lua, CLISP, Common Lisp with UFFI/CFFI, R, Octave

など,メジャーどころからマイナーなものまで幅広くカバーしてます.

また,各種スクリプト言語の Java VM 上での実装,たとえば Python に対する Jython (http://www.jython.org/) などを使えば,Python (や他のスクリプト言語)のプログラムから Java の各種ライブラリ(Swing など)を簡単に使えるようになります.

あとは,最近あまり流行りませんが,そのものずばり「異種言語で書かれたモジュール/システムの連携」を目指したフレームワークとしては CORBA (http://ja.wikipedia.org/wiki/Common_Object_Request_Broker_Archit...) があります.適切な ORB(仲介モジュールと思ってください)を使えば,以下の言語で書かれたモジュールを相互に連携可能になります(Wikipedia より抜粋;他にもまだあると思います):

Ada, C, C++, LISP, Smalltalk, Java, COBOL, PL/I, Python, Perl, PHP, Ruby, Visual Basic, Tcl

とてもすばらしいお話に見えますが,IDL(インタフェース定義言語)記述などを別途準備する必要があったり,ORB によってできること/できないことが違ったり,実際に使おうとすると面倒なことも多いです.

連携の目的にもよりますが,趣味の範囲や一般の PC 環境での話でしたら SWIG の利用を,エンタープライズ環境での異種システム連携なんて話でしたら CORBA の利用を,それぞれ最初に検討してみると良いのかな,と思います.

◎質問者からの返答

いきなり全体像が見えたので感動しています。

1.windows(.dll)とunix(lib**.so)

2.ライブラリ直書き(C:勉強用)とツール(SWIG:趣味用)とフレームワーク(CORBA:業務用)

3.VM上にスクリプト言語が実装されている場合は簡単にJAVAと連携できる

思いつきでやっていたときは、全体はshで制御、データはファイルで中継させたりと無駄が多かったので飛躍ができればと思います。


3 ● ken33jp
●10ポイント

>「片方の言語で作った実行ファイルを他方で実行する」が基本と考えてよいですか?

一番無難です。

ほかの方法は、はまったらとことんはまりまくります。

http://q.hatena.ne.jp/answer

◎質問者からの返答

なるほど、それでよかったのですね


4 ● 匿名回答0号
●10ポイント

Unix の場合は、未だにパイプ共有ライブラリが主流だと思いますが、

Windows の場合は、共有ライブラリの他、COM.NET Framework が主流だと思います。

◎質問者からの返答

基本的なところが書いてあって参考になりました。

少し早いですが、締め切ります。

関連質問


●質問をもっと探す●



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