JNI передать по ссылке, это возможно? - PullRequest
3 голосов
/ 07 октября 2009

У меня есть программа на 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 ]

6 голосов
/ 07 октября 2009

Существует общая методика имитации дополнительного параметра 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 голос
/ 07 октября 2009

Если ваш сценарий настолько прост, как вы описали, почему бы просто не вернуть NULL для «истинного» случая (даже если это, как правило, обратное тому, что вы могли ожидать) и вернуть указатель на структуру ошибки в случае, если что-то идет неправильно?

...