JNI通过参考,是否可能?

Pet*_*y B 3 c++ java java-native-interface pass-by-reference

我有一个Java程序,它调用C++程序来验证用户.我希望程序返回true或false,如果为false,则更新指向错误消息变量的指针,然后我可以从Java程序中获取该指针.

另一个探索:

本机方法看起来像这样:

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

我会在这里称之为方法:

boolean canLogin = takeInfo(domain, userID, "", userPass, String &error)

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

有任何想法吗?

最初我有它所以程序将返回"true"或错误消息,作为一个jstring,但我的老板希望它如上所述.

Den*_*s C 6

有一种常见的技术可以通过在参数中使用对象数组来模拟附加的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];
}
Run Code Online (Sandbox Code Playgroud)

返回结果对象还有另一种方法

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

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