SWIG:如何包装std :: string&(std :: string通过引用传递)

SWIG:如何包装std :: string&(std :: string通过引用传递),第1张

SWIG:如何包装std :: string&(std :: string通过引用传递

我能找到的最佳方法是编写自己的类型图。我一直希望有一些琐碎的SWIG指令。

万一其他人需要它,这就是我的方法。请记住,我不是SWIG专家。

首先,您需要定义一些要应用于std :: string&参数的类型映射。您只需要定义一次。(注意:在某些配置中可能还需要其他类型映射。)

%typemap(jni) std::string *INOUT, std::string &INOUT %{jobjectArray%}%typemap(jtype) std::string *INOUT, std::string &INOUT "java.lang.String[]"%typemap(jstype) std::string *INOUT, std::string &INOUT "java.lang.String[]"%typemap(javain) std::string *INOUT, std::string &INOUT "$javainput"%typemap(in) std::string *INOUT (std::string strTemp ), std::string &INOUT (std::string strTemp ) {  if (!$input) {    SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null");    return $null;  }  if (JCALL1(GetArrayLength, jenv, $input) == 0) {    SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element");    return $null;  }  jobject oInput = JCALL2(GetObjectArrayElement, jenv, $input, 0);   if ( NULL != oInput ) {    jstring sInput = static_cast<jstring>( oInput );    const char * _pstr = (const char *)jenv->GetStringUTFChars(sInput, 0);     if (!_pstr) return $null;    strTemp.assign( _pstr );    jenv->ReleaseStringUTFChars( sInput, _pstr);    }   = &strTemp;}%typemap(freearg) std::string *INOUT, std::string &INOUT ""%typemap(argout) std::string *INOUT, std::string &INOUT{   jstring jStrTemp = jenv->NewStringUTF( strTemp$argnum.c_str() );  JCALL3(SetObjectArrayElement, jenv, $input, 0, jStrTemp ); }

接下来,对于 每个 像这样的C ++参数模式…

void foo( std::string & xyzzy );void bar( std::string & xyzzy );void baz( ..., std::string & xyzzy, ... );

…您可以通过以下SWIG指令应用上述类型映射:

%apply std::string &INOUT { std::string & xyzzy };

产生的绑定如下所示:

public void foo( java.lang.String[] xyzzy );public void bar( java.lang.String[] xyzzy );public void baz( ..., java.lang.String[] xyzzy, ... );

它们每个都需要一个一元素的String数组。在输入时,第一个元素可以为null。如果非空,则将其转换为UTF-8 std :: string值并传递给C
++函数。在退出时,通过引用传递的std :: string的值将从UTF-8转换回Java String。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5490026.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存