%{ #include %} namespace std { // use "const string &" typemaps for wrapping member strings %naturalvar string; class string; %typemap(ctype) string "char *" %typemap(ctype) string * "char *" %typemap(ctype) string & "char *" %typemap(ctype) const string & "char *" %typemap(in) string { if ($input) { $1.assign($input); } else { $1.resize(0); } } %typemap(in) const string &, string *, string & { if ($input) { $1 = new std::string($input); } else { $1 = new std::string(); $1->resize(0); } } %typemap(freearg) const string &, string *, string & { if ($1) delete $1; } %typemap(out) string { const char *str = cppresult.c_str(); size_t len = strlen(str); $result = (char *) malloc(len + 1); memcpy($result, str, len); $result[len] = '\0'; } %typemap(out) const string &, string *, string & { const char *str = cppresult->c_str(); size_t len = strlen(str); $result = (char *) malloc(len + 1); memcpy($result, str, len); $result[len] = '\0'; } }