使用函数指针为C struct创建JNA映射

时间:2015-10-13 15:47:10

标签: java c struct jna

我正在为solution which allows to build such external libraries for iOS C库创建JNA映射。一路上我也在学习C.我遇到了一个结构,我不确定如何映射,而且我一直无法找到任何资源来帮助。

以下是struct

的片段
SASL

“nVersion”是普通成员,可以在java中轻松映射。

我的问题在于功能指针SetParameter。 (我认为这就是它)

在Java中,结构体被映射到jna.Structure类的子元素。因为这是一个类(不是接口),所以我无法定义没有主体的方法头,这就是我如何映射方法。

有谁知道这个映射应该是什么样的?

由于

1 个答案:

答案 0 :(得分:1)

JNA使用Callback个对象来表示函数指针,并包含a description of callback usage

创建一个派生自Callback的接口,它实现一个与函数指针匹配的方法。

public class MyStructure extends Structure {    

    public MyCallback callback;

    public interface MyCallback extends Callback {
        void invoke();
    }
}

如果从本机内存中读取结构,您将获得一个可用于调用函数指针的代理对象。

从Java代码中,您可以为字段分配一个新值,如下所示:

MyStructure s = ...;
s.callback = new MyCallback() {
    public void invoke() {
        // your callback implementation here
    }
};