★★★★★对JNI熟悉的朋友请进来,请教一个在C++中调用Java的方法★★★★★

linuxyf 2008-11-17 10:33:49
问题描述如下:
一个Java类(Test.java),带有Main方法,在该类中还有一个静态变量和一个修改该变量的静态方法。部分相关代码如下:
private static long focus = 0; //静态变量
//修改focus的方法
public static long GetIntMethod(int m) {
focus = focus + m;
return focus;
}

在启动Test应用后(java.exe Test.class),该Java应用程序会驻留内存,不会结束。那么在Java应用程序运行期间,如何在C++中通过JNI调用得到当前运行的虚拟机实例,得到Test实例,并调用上面的静态方法,GetIntMethod,修改并返回focus变量的值?

哪位高手能给点建议??
...全文
208 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
spearhead1 2008-12-01
  • 打赏
  • 举报
回复
关注!
cjmiou 2008-11-18
  • 打赏
  • 举报
回复
不熟
帮顶了
goodmrning 2008-11-18
  • 打赏
  • 举报
回复
学习
danielzhan 2008-11-18
  • 打赏
  • 举报
回复
如果在DLL想取得一个Java class的实例,并通过这个实例调用Java的Methods.
可以在一个Java class先call一个JNI的function,从而在DLL端取得此Java class的实例.
例如在Java端,class test.MyFunctions 有Methods: public void function1() 和 public void callback(int iv, String str)
在DLL端我们就可以写
jmethodID jmd;

JNIEXPORT jint JNICALL Java_test_MyFunctions_function1(JNIEnv * JNI, jobject obj)
{
.....
if(JNI)
{
jclass java_class = JNI->GetObjectClass(obj);
jmd= JNI->GetMethodID(java_class,"callback", "(ILjava/lang/String;)V");
//取static Method,调用GetStaticMethodID
}
.....
}

保留jmd,在需要call method "callback"的时候运行JNI->CallVoidMethod(obj, jmd, paramInt, parameStr);

参考面的链接,相信会很有帮助的.
http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html
pauliuyou 2008-11-18
  • 打赏
  • 举报
回复
可以用消息队列通信,但是想得到Test实例,不太可能. 首先必须在C++环境中也定义同样的类型(C++语法的) 然后再根据通信得到的数据,在C++环境里本地创建一个对象. 直接用JAVA的对象好象不可以啊. java和java间是可以实现的.但是C++有些难
pauliuyou 2008-11-18
  • 打赏
  • 举报
回复
消息队列
linuxyf 2008-11-18
  • 打赏
  • 举报
回复
后面的几位兄弟没有明白我的意思啊
danielzhan 2008-11-18
  • 打赏
  • 举报
回复
把DLL和Java project一起打包.
在Java class里调用
static {
try{
System.loadLibrary("XXXXX");
}catch(Exception e){}
}
可以把DLL也载入VM,这样Java classes和DLL都在一个进程中,就可以互相调用了.
joynet007 2008-11-18
  • 打赏
  • 举报
回复
JNI
是可以用 java 调用dll 的动态链接库哦!

c++ 也可以通过 jni 反过来调用java 么?

还是xml 吧!!通用
kokobox 2008-11-17
  • 打赏
  • 举报
回复
c++调用java,没这样试过。我是用socket来实现的。 c++请求,socket返回xml给他

或者可以直接用ws


FairLu 2008-11-17
  • 打赏
  • 举报
回复
mark
tiyuzhongxin789 2008-11-17
  • 打赏
  • 举报
回复
c++调用java,没这样试过。我是用socket来实现的。 c++请求,socket返回xml给他

或者可以直接用ws
renmms 2008-11-17
  • 打赏
  • 举报
回复
关注
badlove3 2008-11-17
  • 打赏
  • 举报
回复
帮顶了~~~~~~~~~。。,
TinyJimmy 2008-11-17
  • 打赏
  • 举报
回复
直接调用不可能,哪怕是C++与C++程序之间. 进程之间数据交换可以通过管道,消息,socket,文件,数据库等等

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧