JNI通过引用传递,可能吗? 我有一个java程序,它调用C++程序来验证用户。我希望程序返回true或false,如果返回false,则更新指向错误消息变量的指针,然后可以从Java程序中获取该变量

JNI通过引用传递,可能吗? 我有一个java程序,它调用C++程序来验证用户。我希望程序返回true或false,如果返回false,则更新指向错误消息变量的指针,然后可以从Java程序中获取该变量,java,c++,java-native-interface,pass-by-reference,Java,C++,Java Native Interface,Pass By Reference,另一种解释: 本机方法的外观如下所示: public native String takeInfo(String nt_域、String nt_id、String nt_idca、String nt_密码、String&error) 我在这里称之为这种方法: boolean canLogin=takeInfo(域、用户ID、”、用户密码、字符串和错误) 然后,在C++程序中,我检查用户是否被验证并将其存储在布尔函数中,如果是false,则获取错误消息并用它更新和出错。然后将该布尔值返回到我的Ja

另一种解释:

本机方法的外观如下所示:

public native String takeInfo(String nt_域、String nt_id、String nt_idca、String nt_密码、String&error)

我在这里称之为这种方法:

boolean canLogin=takeInfo(域、用户ID、”、用户密码、字符串和错误)

然后,在C++程序中,我检查用户是否被验证并将其存储在布尔函数中,如果是false,则获取错误消息并用它更新和出错。然后将该布尔值返回到我的Java程序,在那里我可以显示错误或让用户通过

有什么想法吗


最初我有它,因此程序将返回“true”或错误消息,作为jstring,但我的老板希望它如上所述。

如果您的场景像您描述的那样简单,为什么不直接为“true”返回NULL(尽管这通常与您可能期望的相反)如果出现问题,返回一个指向错误结构的指针?

有一种常用技术,通过使用对象数组in parameter来模拟额外的out参数

比如说

public native String takeInfo(String nt_domain, String nt_id, String nt_idca, String nt_password, String[] error);

boolean canLogin = takeInfo(domain, userID, "", userPass, error);
if(!canLogin){
   String message = error[0];
}
还有一种方法是返回结果对象

class static TakeInfoResult{
   boolean canLogon;
   String error;
}
TakeInfoResult object = takeInfo(domain, userID, "", userPass);

在第二种情况下,您需要在JNI层中编写更多程序。

谢谢,我需要在本机(C++)代码中做什么来更新带有错误消息的“error”呢?准备字符串对象,并将其分配到数组中