我已經使用%typemap特定于兩個參數的類型和名稱成功地將緩沖區指針/緩沖區長度對映射到 ByteBuffer 。對于同一方法中的多對參數,沒有類型映射的近乎冗余的副本,并且沒有僅按類型匹配,我該如何做同樣的事情?細節例如,使用這些類型映射:%typemap(jni) (void *outBuffer, int32_t bufferLen ) "jobject"%typemap(jtype) (void *outBuffer, int32_t bufferLen) "java.nio.ByteBuffer"%typemap(jstype) (void *outBuffer, int32_t bufferLen) "java.nio.ByteBuffer"%typemap(javain) (void *outBuffer, int32_t bufferLen) "$javainput"%typemap(javaout) (void *outBuffer, int32_t bufferLen) { return $jnicall;}%typemap(in) (void *outBuffer, int32_t bufferLen) { $1 = jenv->GetDirectBufferAddress($input); $2 = (long)(jenv->GetDirectBufferCapacity($input));}我可以 SWIG 一個 C++ 方法,如:int32_t getArrayData( void * outBuffer, int32_t bufferLen );進入 Java 綁定,如:public int getArrayData( java.nio.ByteBuffer outBuffer ) { ...}但是現在我想 SWIG 一個 C++ 方法來接受兩個參數對:int32_t getArrayData( void * outBuffer, int32_t bufferLen, void * outBuffer1, int32_t bufferLen1 );并進入 Java:public int getArrayData( java.nio.ByteBuffer outBuffer, java.nio.ByteBuffer outBuffer1 ) { 沒有:復制%typemaps以上所有內容并在每個參數名稱的末尾添加一個“1”。通過從上面刪除所有參數名稱來匹配所有void*/int32_t參數對%typemaps。在 *.i 文件上運行預處理器。這在 SWIG 中可行嗎?
1 回答

喵喔喔
TA貢獻1735條經驗 獲得超5個贊
如11.1.4 重用類型映射和11.2.3 復制類型映射中的 SWIG 手冊中所述,您可以使用 輕松復制其他簽名或類型的現有(多參數)類型映射%apply
。在你的情況下,你可能需要
%apply (void *outBuffer, int32_t bufferLen) { (void *outBuffer1, int32_t bufferLen1) };
復制所有存在于(void *outBuffer, int32_t bufferLen)
to 的類型圖(void *outBuffer1, int32_t bufferLen1)
。
添加回答
舉報
0/150
提交
取消