Ссылки на указатели между C и Java - PullRequest
0 голосов
/ 06 декабря 2010

Я совершенно новичок в JNI и C, и у меня возникают проблемы, когда я не могу понять, как выполнить эту задачу.

У меня есть встроенная функция C со следующей подписью: void DoEncrypt (char * buffer, int * length) {... зашифровать данные в буфере на месте ... ...}

У меня также есть обратный метод для дешифрования на обратном пути.Проблема, с которой я сталкиваюсь, заключается в том, чтобы выяснить, с помощью JNI, как передать два указателя, а затем извлечь зашифрованный или дешифрованный пароль из его расположения в памяти, либо с помощью класса-оболочки, либо с помощью исходного метода Java.Прямо сейчас я думаю написать оболочку на C, чтобы вызывать функции DoEncrypt и DoDecrypt, которые будут использовать jobject и jstring для ввода и вывода значения пароля.

Это правильно?Это лучший / самый простой / быстрый способ?

Я ценю любую помощь, которой вы можете поделиться.

Спасибо,

Чак

1 Ответ

0 голосов
/ 06 декабря 2010

функции-обертки хороши, так как вы можете тестировать DoEncrypt и DoDecrypt непосредственно из C. Вы можете написать обертку следующим образом:

void DoEncrypt_jni(JNIEnv** env, jarray* buffer, int* length) {
    ... call the real DoEncrypt ...
}

(я давно писал функцию JNIЭто может быть не так правильно ...) В качестве альтернативы, вы можете попробовать использовать JNA , что по сути является "JNI с меньшей болью".С помощью JNA вы можете написать класс Java

public class EncryptUtilsJNA {
    public static native void DoEncrypt(byte[] buffer, int length);
    public static native void DoDencrypt(byte[] buffer, int length);
}

, и JNA решает, как вызывать функции DoEncrypt / DoDecrypt C, которые, очевидно, должны вызываться из Java, как вы это делаете с JNI.*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...