我已经使用特定于两个参数的类型和名称的ByteBuffer成功地将缓冲区指针/缓冲区长度对映射到一个%typemap。
对于同一方法中的多对参数,没有几乎冗余的类型映射副本,并且不按类型进行匹配,我如何做到相同呢?
详细信息
例如,使用这些类型地图:
%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++方法,例如:
int32_t getArrayData( void * outBuffer, int32_t bufferLen );转换为Java绑定,如:
public int getArrayData( java.nio.ByteBuffer outBuffer ) { ...}但是,现在我想要使用一个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 /%typemaps参数对。这在酒杯里可行吗?
发布于 2018-07-26 23:51:37
正如11.1.4重复使用类型图和11.2.3复制打字机地图中的SWIG手册中详细介绍的那样,您可以很容易地使用%apply为其他签名或类型复制现有的(多参数)类型地图。在你的情况下,你可能需要
%apply (void *outBuffer, int32_t bufferLen) { (void *outBuffer1, int32_t bufferLen1) };将(void *outBuffer, int32_t bufferLen)存在的所有类型映射复制到(void *outBuffer1, int32_t bufferLen1)。
https://stackoverflow.com/questions/51505405
复制相似问题