簡體   English   中英

JNA如何從dll收到的Pointer中的Java中調用方法?

[英]JNA how call a method from java in an Pointer received from dll?

我在dll中有一個返回指向對象的指針的方法

C代碼

basic_hash* getAlgorithmInstance( int algorithm )

對象具有以下方法:

void reset ();
void hash (const byte* data, uint64 size, vector_byte& hash).

如何調用該對象的方法?

我有一個返回指針的實現

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;
        }
    }

您需要為每個函數指針聲明回調。 這是“重置”的示例。

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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM