JNI通过参考,是否可能?

时间:2009-10-07 16:17:55

标签: java c++ 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,但我的老板会喜欢它如上所述。

2 个答案:

答案 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(即使这通常是您可能期望的倒退)并返回指向错误结构的指针错?