बस अगर कोई भविष्य में इसकी तलाश कर रहा है, तो मैंने सी # के लिए std_string.i बनाया है। लगता है मेरे लिए काम करता है। ध्यान दें कि मैंने रेफरी को बदल दिया क्योंकि यह मेरे मामले में अधिक उपयुक्त था लेकिन रेफरी भी काम करना चाहिए।
मैं% बुलाया मैं फ़ाइल
/* -----------------------------------------------------------------------------
* std_string_ref.i
*
* Typemaps for std::string& and const std::string&
* These are mapped to a C# String and are passed around by reference
*
* ----------------------------------------------------------------------------- */
%{
#include <string>
%}
namespace std {
%naturalvar string;
class string;
// string &
%typemap(ctype) std::string & "char**"
%typemap(imtype) std::string & "/*imtype*/ out string"
%typemap(cstype) std::string & "/*cstype*/ out string"
//C++
%typemap(in, canthrow=1) std::string &
%{ //typemap in
std::string temp;
$1 = &temp;
%}
//C++
%typemap(argout) std::string &
%{
//Typemap argout in c++ file.
//This will convert c++ string to c# string
*$input = SWIG_csharp_string_callback($1->c_str());
%}
%typemap(argout) const std::string &
%{
//argout typemap for const std::string&
%}
%typemap(csin) std::string & "out $csinput"
%typemap(throws, canthrow=1) string &
%{ SWIG_CSharpSetPendingException(SWIG_CSharpApplicationException, $1.c_str());
return $null; %}
}
कारण मैं स्थिरांक एसटीडी के लिए argout परिभाषित करने की जरूरत :: स्ट्रिंग & है, क्योंकि बड़ा घूँट भ्रमित हो और स्थिरांक एसटीडी को पार कर जाएगी से "std_string.i" में शामिल हैं: : स्ट्रिंग & टाइपमैप के साथ भी।
%typemap(argout)std::string&
{
//typemap argout std::string&
PyObject* obj = PyUnicode_FromStringAndSize((*$1).c_str(),(*$1).length());
$result=SWIG_Python_AppendOutput($result, obj);
}
%typemap(argout) const std::string &
%{
//argout typemap for const std::string&
%}
: तो मैं स्पष्ट रूप से यह बताना मेरे मामले में ओवरराइड करने के लिए नहीं (आप एक अलग उपयोग के मामले हो सकता है)
पायथन के लिए मैं कुछ इस तरह बनाया