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后, 取不到返回值, 怎么办?
你这好像是VC调用java class呢
你的参数传递是否正确?根据你所说如果什么都不做直接return true的话结果是正确的,那么可能是你参数传递不正确导致了return false。JNI中C/C++调用java参数传递是一个比较头疼的问题,要转换正确才行,否则方法调用可能失败或者得到不正确的结果
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产生影响吗?
options[0].optionString = "-Djava.class.path=d:\\bin;d:\\Json-simple-1.1.jar";