jna如何在从dll接收的指针中从java调用方法?

50few1ms  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(428)

我在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;
        }
    }
falq053o

falq053o1#

您需要为每个函数指针声明回调。这里有一个“重置”的例子。

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

相关问题