4

我有一个调用 C++ 程序来验证用户身份的 Java 程序。我希望程序返回 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,则获取错误消息并使用它更新 &error。然后将该布尔值返回给我的 Java 程序,在那里我可以显示错误或让用户通过。

有任何想法吗?

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

4

2 回答 2

8

有一种通用技术可以通过在参数中使用对象数组来模拟附加输出参数。

例如。

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 层中进行更多编程。

于 2009-10-07T17:01:04.087 回答
0

如果您的场景像您描述的那样简单,为什么不只为“真”情况返回 NULL(即使这通常与您所期望的相反)并在出现问题时返回指向错误结构的指针?

于 2009-10-07T16:42:18.620 回答