使用SWIG包装器将未知大小的数组返回给Java

时间:2013-05-07 02:15:37

标签: java c++ swig

我编写了一个小数据类型,用于将数据存储在char数组中。以下是头文件中的基本定义:

class SimpleBuffer {
public:
    ...
    const char* getData();
    int getSize();

private:
    char* data;
};

我希望getData()在Java中将其表示的副本作为byte[]返回。我的打印地图如下所示:

    %typemap(jstype) const char* SimpleBuffer::getData "byte[]"
    %typemap(jtype) const char* SimpleBuffer::getData "byte[]"
    %typemap(jni) const char* SimpleBuffer::getData "jbyteArray"
    %typemap(out) const char* SimpleBuffer::getData {
            $result = JCALL1(NewByteArray, jenv, arg1->getSize());
            JCALL4(SetByteArrayRegion, jenv, $result, 0, arg1->getSize(), (const jbyte*)arg1->getData());
    }

在编译时,我必须引用arg1变量,它是传递给JNI函数的SimpleBuffer指针。有一个更好的方法吗? SWIG是否定义了一个$变量来访问传递给JNI函数的类(即arg1)?

感谢您的帮助!

0 个答案:

没有答案