2010-12-06 7 views
0

저는 JNI와 C에 완전히 익숙하지 않습니다.이 작업을 수행하는 방법에 대해 머리를 감싸는 데 문제가 있습니다. C와 Java 간의 포인터 참조

난 다음 서명 네이티브 C 함수 가지고 공극 DoEncrypt (숯불 * 버퍼의 INT * 길이) {장소 ... 에서 버퍼 ... 데이터 암호화 ... }

나는 또한 도중에 복호화를 수행하는 역 방법이있다. 내가 겪고있는 문제는 JNI를 사용하여 두 포인터를 전달한 다음 래퍼 클래스 나 원래 Java 메서드 중 하나를 사용하여 메모리 위치에서 암호화되거나 해독 된 암호를 검색하는 방법입니다.

지금 당장 내 생각은 C에서 래퍼를 작성하여 DoEncrypt 및 DoDecrypt 함수를 호출하여 jobject 및 jstring을 사용하여 암호 값을주고받는 것입니다.

이 정보가 맞습니까? 가장/가장 단순한/가장 빠른 방법입니까?

귀하가 공유 할 수있는 모든 도움에 감사드립니다.

척에게 감사

답변

0

래퍼 함수를 ​​사용하면 C.에서 직접 DoEncrypt 및 DoDecrypt을 테스트 할 수 있기 때문에이 같은 래퍼 쓸 수 있습니다, 좋은 : (

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

을 그것은 JNI 함수를 작성한 이후로 오랜 시간이 걸렸습니다. 그렇습니다.) 대체로 JNA을 사용할 수 있습니다. 기본적으로 "덜 고통스러운 JNI"입니다. JNA와 , 당신은 자바 클래스를

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

를 쓸 수 및 JNA 분명히 그들은 당신이 JNI로 할 것 같은 자바에서 호출 할 수있는 DoEncrypt/DoDecrypt C 함수를 호출하는 방법을 사용할 수 있습니다.