首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为多个参数对定义一次SWIG类型映射

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

Stack Overflow用户
提问于 2018-07-24 18:33:00
回答 1查看 408关注 0票数 0

我已经使用特定于两个参数的类型和名称的ByteBuffer成功地将缓冲区指针/缓冲区长度对映射到一个%typemap

对于同一方法中的多对参数,没有几乎冗余的类型映射副本,并且不按类型进行匹配,我如何做到相同呢?

详细信息

例如,使用这些类型地图:

代码语言:javascript
复制
%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));
}

我可以大幅度地使用C++方法,例如:

代码语言:javascript
复制
int32_t getArrayData( void * outBuffer, int32_t bufferLen );

转换为Java绑定,如:

代码语言:javascript
复制
public int getArrayData( java.nio.ByteBuffer outBuffer ) { ...}

但是,现在我想要使用一个C++方法来获取两个参数对:

代码语言:javascript
复制
int32_t getArrayData( void * outBuffer, int32_t bufferLen,
    void * outBuffer1, int32_t bufferLen1 );

然后进入Java:

代码语言:javascript
复制
public int getArrayData( java.nio.ByteBuffer outBuffer,
   java.nio.ByteBuffer outBuffer1 ) { 

没有:

  • 复制上面所有的%typemaps并在每个参数名的末尾添加一个"1“。
  • 通过从上面的void*/int32_t参数中删除所有参数名,来匹配所有的%typemaps /%typemaps参数对。
  • 在*I文件上运行预处理器。

这在酒杯里可行吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-26 23:51:37

正如11.1.4重复使用类型图11.2.3复制打字机地图中的SWIG手册中详细介绍的那样,您可以很容易地使用%apply为其他签名或类型复制现有的(多参数)类型地图。在你的情况下,你可能需要

代码语言:javascript
复制
%apply (void *outBuffer, int32_t bufferLen) { (void *outBuffer1, int32_t bufferLen1) };

(void *outBuffer, int32_t bufferLen)存在的所有类型映射复制到(void *outBuffer1, int32_t bufferLen1)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51505405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档