我想知道如何从我的Java应用程序中获取C ++运行程序的变量。我想我必须做一个API,但我不知道如何开始这个。事实上,我想获得有关Ekiga软电话中数据包的信息。我在Ekiga main.cpp
中对我想要的内容进行了本地化:
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 :(得分:2)
我认为你需要的是JNI:http://en.wikipedia.org/wiki/Java_Native_Interface
您必须创建一个dll,它将具有返回此值的方法,并且具有将使用此dll的本机方法的java类。
答案 1 :(得分:1)
听起来好像要使用JNI或JNA等技术来实现桥接层。 第二种选择是在两种语言之间编写Web service或Message passing图层。我会避免CORBA这样一个简单的问题(实际上,我会避免CORBA期间hehehe)。 或者让C ++将数据写入数据库,文件等,并编写Java代码来读取它。
答案 2 :(得分:1)
您无法直接从其他进程访问c ++变量。我不知道ekiga是否已经提供了从外部程序获取数据的方法,所以这里有几种获取数据的方法(都涉及以某种方式修改ekiga本身)。
添加套接字以侦听ekiga程序中的连接,并使用客户端套接字使java程序连接到此套接字。这样,只要这些值发生变化,您就可以将信息发送到连接的java程序。
在ekiga中启动java程序或让你的java程序启动ekiga作为本机方法调用。这两个都涉及jni并导致两个部分(ekiga和java程序)作为单个进程运行。
第一个更简单,更不容易出错,但是你需要一些关于java和c ++中网络编程的基本知识。