From: Sergio G. V. @ DAMA-U. <sg...@ac...> - 2011-05-06 16:40:22
|
Any suggestion about that? Thanks, Sergio On May 5, 2011, at 8:26 AM, Sergio Gómez Villamor @ DAMA-UPC wrote: > Hi all, > > I want to wrap this function (to Java and C#): > void MyClass::GetName(std::wstring &name); > where name is an output parameter to get the name. > > Of course, I have included std_wstring.i as well as I have added the corresponding apply for non-const wstrings. > But wrapped code wraps the argument as an input parameter: > > SWIGEXPORT void JNICALL Java_MyClass_1GetAlias(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) { > ... > const jchar *arg2_pstr = jenv->GetStringChars(jarg2, 0); > if (!arg2_pstr) return ; > jsize arg2_len = jenv->GetStringLength(jarg2); > std::wstring arg2_str; > if (arg2_len) { > arg2_str.reserve(arg2_len); > for (jsize i = 0; i < arg2_len; ++i) { > arg2_str.push_back((wchar_t)arg2_pstr[i]); > } > } > arg2 = &arg2_str; > jenv->ReleaseStringChars(jarg2, arg2_pstr); > > (arg1)->GetName(*arg2); > return ; > } > > > After that, I have tried adding this to the swig interface file: > %apply std::wstring &OUTPUT { std::wstring &name}; > But it didn't worked getting this warning: > dexjava.i:92: Warning 453: Can't apply (std::wstring &OUTPUT). No typemaps are defined. > > > I've read the documentation of std_wstring and I guess this is the problem: > " > 7 * To use non-const std::wstring references use the following %apply. Note > 8 * that they are passed by value. > " > > > But, do you have a solution for this scenario? > > Thanks in advance, > Sergio |