2016-03-28 4 views
1

IはJNAからdllから受け取ったポインタのjavaからメソッドを呼び出す方法はありますか?私はこのメソッドを呼び出すことができる方法</p> <pre><code>void reset(); void hash (const byte* data, uint64 size, vector_byte& hash). </code></pre> <p>:

Cコード

basic_hash* getAlgorithmInstance(int algorithm) 

オブジェクトは以下のメソッドを持つオブジェクトへのポインタを返すDLL内のメソッドを持っていますオブジェクト?

私はあなたが各関数ポインタのためのコールバックを宣言する必要がポインタ

Javaコード

public interface LIB extends Library { 
     LIB INSTANCE = (LIB) Native.loadLibrary(
       (Platform.isWindows() ? "LIB " : "linuxLIB"), LIB.class); 
     Pointer getAlgorithmInstance(int i); 
    } 

    public static void main(String[] args) { 
     try { 
      LIB lib = LIB.INSTANCE; 
      Pointer pointer = lib.getAlgorithmInstance(0); 
      //pointer.reset(); //TODO how call? 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return; 
     } 
    } 
+0

「C」には「オブジェクト」はありません。あなたの関数は構造ポインタ( 'struct *')を返す可能性が最も高いです。 'basic_hash'の定義を見せて、' Callback'や 'function pointer 'へのJNA参照を調べます。 – technomage

+0

basic_hash - 次のメソッドとのインターフェイスです:\t ** void reset(); void partial(const byte * data、uint64 size); void finalize(vector_byte&hash); void hash(const byte * data、uint64 size、vector_byte&hash)。** – 6azbljlb

答えて

0

を返す実装を持っています。以下は "リセット"の例です。

+0

私はVMフォールトをリセットすると、DLLのカーブまたは間違った呼び出しになりますか? – 6azbljlb

+0

#JREバージョン:Java(TM)SEランタイム環境(7.0_79-b15)(ビルド1.7.0_79-b15) #Java HotSpot(TM)クライアントVM(24.79-b02混合モードwindows-x86) #問題のあるフレーム: #C [HAL.dll + 0x5524] ' – 6azbljlb

関連する問題