簡體   English   中英

如何使用JNA為具有多個返回值的go函數編寫接口

[英]How to write interface for a go function with multi return values with JNA

我正在嘗試導出一些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();
}

暫無
暫無

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

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