我已经使用%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 回答
![?](http://img1.sycdn.imooc.com/533e4c1500010baf02200220-100-100.jpg)
喵喔喔
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
提交
取消