2016-03-28 63 views
1

IJNA dll'den alınan bir İşaretçi'de java'dan nasıl bir yöntem çağırılır? Bu ve yöntemlerini çağırabilir</p> <pre><code>void reset(); void hash (const byte* data, uint64 size, vector_byte& hash). </code></pre> <p>:

C kodu

basic_hash* getAlgorithmInstance(int algorithm) 

amacı, aşağıdaki yöntemleri içeren bir nesne için bir işaretçiyi geri döndürmektedir DLL içinde bir yöntemi vardır nesne?

Ben

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" de "object" diye bir şey yoktur. İşleviniz büyük olasılıkla bir yapı işaretçisini döndürür ('struct *'). Bize 'basic_hash' tanımını gösterin ve 'Geri arama' veya 'işlev işaretçisi' JNA referanslarına bakın. – technomage

+0

basic_hash - Bir sonraki yöntemle arayüz: \t ** void reset(); geçersiz kısmi (const byte * veri, uint64 boyutu); void son hali (vector_byte & hash); void hash (const bayt * veri, uint64 boyutu, vector_byte & hash). ** – 6azbljlb

cevap

0

Her işlev işaretçisi için geri aramalar beyan gereken bir işaretçi

java kodunu döndüren bir uygulama var. İşte "sıfırlama" için bir örnek.

public class BasicHash extends Structure { 
    public interface Reset extends Callback { 
     public void invoke(); 
    } 
    public Reset reset; 
    public BasicHash() { } 
    public BasicHash(Pointer p) { super(p); read(); } 
} 

BasicHash hash = mylib.getAlgorithmInstance(0); 
hash.reset.invoke(); 
+0

Eğer VM düştüğümü çağırırsam, dll eğrisi veya yanlış bir çağrı düşüyor? – 6azbljlb

+0

'# JRE sürümü: Java (TM) SE Çalışma Zamanı Ortamı (7.0_79-b15) (derleme 1.7.0_79-b15) # Java VM: Java HotSpot (TM) İstemci VM'si (24.79-b02 karışık mod windows-x86) # Sorunlu çerçeve: # C [HAL.dll + 0x5524] – 6azbljlb