java函数: public boolean SendLog(String Access_Token, String Title, String Content);vc调用:
mid = env->GetMethodID(cls,"<init>","()V"); 
if(mid !=0)   
{     
jobj=env->NewObject(cls,mid);   
}   
mid = env->GetMethodID( cls, "SendLog","(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z");   
if(mid !=0)   
{     
   jboolean ret = env->CallBooleanMethod(jobj, mid, s1, s2, s3); 
| 我在SendLog()中都是return true, 没有returen false的地方.运行结果ret为0, 这是不对的.后来将SendLog()修改为什么都不做, 直接返回true, 这回对了, ret为1.用JNI技术调用java class后, 取不到返回值, 怎么办?

解决方案 »

  1.   

    JNI 是java调用dll吧。
    你这好像是VC调用java class呢
      

  2.   

    jboolean ret = env->CallBooleanMethod(jobj, mid, s1, s2, s3);
    你的参数传递是否正确?根据你所说如果什么都不做直接return true的话结果是正确的,那么可能是你参数传递不正确导致了return false。JNI中C/C++调用java参数传递是一个比较头疼的问题,要转换正确才行,否则方法调用可能失败或者得到不正确的结果
      

  3.   

    有谁用JNA调用Dll没有,其中有个Dll提供的接口数据是emun,映射java类型也是emun吗?
      

  4.   

    不是参数传递问题, 我改成:
    public boolean SendLog()
    {
    org.json.simple.JSONObject obj;
    String ddd;
    ddd = "{\"id\":852055722}";
    obj = (org.json.simple.JSONObject) org.json.simple.JSONValue.parse(ddd);
    return true;
    }vc中改为:
    mid = env->GetMethodID( cls, "SendLog","()Z");   
    if(mid !=0)   
    {   
      jboolean ret = env->CallBooleanMethod(jobj, mid);  
    |  结果运行后, ret还是0.会不会是SendLog()调用了静态方法 (org.json.simple.JSONObject) org.json.simple.JSONValue.parse(ddd);的原因?SendLog()调用静态方法会对JNI产生影响吗?
      

  5.   

    我知道了,是classpath问题. vc中:
    options[0].optionString = "-Djava.class.path=d:\\bin;d:\\Json-simple-1.1.jar";