为了账号安全,请及时绑定邮箱和手机立即绑定

为多个参数对定义一次 SWIG 类型映射

为多个参数对定义一次 SWIG 类型映射

慕娘9325324 2021-06-06 13:28:36
我已经使用%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)


查看完整回答
反对 回复 2021-06-10
  • 1 回答
  • 0 关注
  • 185 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信