我有一个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,但我的老板会喜欢它如上所述。
答案 0 :(得分: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];
}
通过返回结果对象还有另一种方法
class static TakeInfoResult{
boolean canLogon;
String error;
}
TakeInfoResult object = takeInfo(domain, userID, "", userPass);
在第二种情况下,您需要在JNI层中编程更多。
答案 1 :(得分:1)
如果您的场景如您所描述的那样简单,为什么不为“true”情况返回NULL(即使这通常是您可能期望的倒退)并返回指向错误结构的指针错?