问题描述如下:
    一个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变量的值?哪位高手能给点建议??

解决方案 »

  1.   

    c++调用java,没这样试过。我是用socket来实现的。 c++请求,socket返回xml给他或者可以直接用ws
      

  2.   

    直接调用不可能,哪怕是C++与C++程序之间. 进程之间数据交换可以通过管道,消息,socket,文件,数据库等等
      

  3.   

    c++调用java,没这样试过。我是用socket来实现的。 c++请求,socket返回xml给他 或者可以直接用ws 
      

  4.   

    如果在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
      

  5.   

    JNI
     是可以用 java 调用dll 的动态链接库哦!c++ 也可以通过 jni 反过来调用java 么?还是xml 吧!!通用
      

  6.   

    把DLL和Java project一起打包. 
    在Java class里调用
    static {
      try{
         System.loadLibrary("XXXXX");
      }catch(Exception e){}
    }
    可以把DLL也载入VM,这样Java classes和DLL都在一个进程中,就可以互相调用了.
      

  7.   

    可以用消息队列通信,但是想得到Test实例,不太可能. 首先必须在C++环境中也定义同样的类型(C++语法的) 然后再根据通信得到的数据,在C++环境里本地创建一个对象. 直接用JAVA的对象好象不可以啊. java和java间是可以实现的.但是C++有些难