2012-01-24 4 views
2

JavaアプリケーションからC++実行プログラムの変数を取得する方法を知りたいと思います。私はAPIをしなければならないと思うが、これをどうやって始めるべきか分からない。実際に、私はEkigaソフトフォンのパケットに関する情報を得たいと思っています。私はEkigaののmain.cppに欲しいものをローカライズ:C++ソフトのAPI

double lost = mw->priv->current_call->get_lost_packets(); 
double late = mw->priv->current_call->get_late_packets(); 
double out_of_order = mw->priv->current_call->get_out_of_order_packets(); 
+0

JNIを使​​用することはできますが、「APIを実行する」または「必要なものをローカライズする」の意味を理解できません。 SIPパケットをキャプチャしたい場合は、wiresharkなどを使用できます。 – AJG85

+0

@ AJG85:いいえ、Javaミドルウェアを使用している間に、失われたパケットと遅いパケットの数を取得したいだけです。 – eouti

答えて

2

私は何が必要だと思うJNIです:http://en.wikipedia.org/wiki/Java_Native_Interface

あなたは、この値を返すメソッドを持っているとネイティブとJavaのクラスを持つことになり、DLLを作成する必要がありますこのDLLを使用するメソッド。

1

JNIJNAなどの技術を使用してブリッジレイヤーを実装したいと思うようなサウンドです。 2つ目のオプションは、2つの言語の間にWeb serviceまたはMessage passingレイヤーを書き込むことです。私はこのような単純な問題のためにCORBAを避ける(実際には、私はCORBA期間heheheを避けるだろう)。 C++でデータベース、ファイルなどにデータを書き込み、それを読み取るJavaコードを記述してください。

1

異なるプロセスからC++変数に直接アクセスすることはできません。 ekigaが既に外部プログラムからデータを取得する方法を提供しているかどうかはわかりません。データを取得するにはいくつかの方法があります(すべてekiga自体を何らかの方法で変更する必要があります)。

  • Ekigaのプログラム内の接続のために耳を傾け、あなたのJavaプログラムはクライアントソケットを使用してこのソケットに接続するためにソケットを追加します。こうすることで、これらの値が変更される前に、接続されているJavaプログラムに情報を送信することができます。

  • ekiga内でjavaプログラムを起動するか、Javaプログラムをekigaをネイティブメソッド呼び出しとして起動します。これらの両方にはjniが含まれており、両方の部分(ekigaとjavaプログラム)が単一のプロセスとして実行されます。

最初は簡単でエラーが発生しにくいですが、JavaとC++の両方でネットワークプログラミングに関する基本知識が必要です。