如何用JNA编写具有多返回值的GO函数的接口



我正在尝试导出一些go函数,并用jna在java中调用它们,但我不知道如何定义Java中的界面,以用于具有多个返回值的GO函数。

说GO功能是:

//export generateKeys
func generateKeys() (privateKey, publicKey []byte) {
    return .....
}

返回值有两个项目,但是在Java中,只有一个返回值。

我该怎么办?

cgo为多个返回值创建一个专用的C结构,单个返回值作为结构元素。

在您的示例中,cgo将生成

/* Return type for generateKeys */
struct generateKeys_return {
    GoSlice r0; /* privateKey */
    GoSlice r1; /* publicKey */
};

,该功能将具有不同的签名,然后您通过JNA

使用该签名
extern struct generateKeys_return generateKeys();

在JNA定义中,您将使用JNA概念(未经测试的代码(类似于结构:

public interface Generator extends Library {
        public class GoSlice extends Structure {
            public Pointer data;
            public long len;
            public long cap;
            protected List getFieldOrder(){
                return Arrays.asList(new String[]{"data","len","cap"});
            }
        }
        public class GenerateKeysResult extends Structure {
            public GoSlice privateKey;
            public GoSlice publicKey;
            protected List getFieldOrder(){
                return Arrays.asList(new String[]{"privateKey","publicKey"});
            }
        }
        public GenerateKeysResult generateKeys();
}

相关内容

  • 没有找到相关文章

最新更新