2010-12-06 18 views
0

私はJNIとCの全く新しいものです。私はこの仕事のやり方に頭を悩ませています。CとJavaの間のポインタの参照

Iは、次のシグネチャを持つネイティブC関数を有する: ボイドDoEncrypt(CHAR *バッファのint *長さ) {代わりに緩衝液中 ...暗号化データを... ...}

私は途中で復号化を行うための逆の方法もあります。私が抱えている問題は、JNIを使​​って、2つのポインタを渡して、ラッパークラスまたは元のJavaメソッドのいずれかによって、そのメモリロケーションから暗号化または復号化されたパスワードを取得する方法を考え出すことです。

今、私は、CでDoEncryptとDoDecrypt関数を呼び出すためにwrapperを記述して、jobjectとjstringを使ってパスワードの値を出し入れすることを考えています。

これは間違いありませんか?それは最高の/簡単な/最速の方法ですか?

あなたが共有できるすべてのヘルプに感謝します。

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

(:

は、あなたがCから直接DoEncryptとDoDecryptをテストすることができますので、ラッパー関数は、あなたがこのようなラッパーを書くことができ、良いです

チャック、

答えて

0

をありがとう私は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); 
} 

Javaクラスを書くことができ、JNAは明らかに、彼らはあなたがJNIを行うだろうように、Javaから呼び出し可能であることを持っている、DoEncrypt/DoDecrypt C関数を呼び出す方法を動作します。