代码之家  ›  专栏  ›  技术社区  ›  6azbljlb

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

  •  1
  • 6azbljlb  · 技术社区  · 8 年前

    我在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;
            }
        }
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   gpmcadam    8 年前

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

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