@@ -101,17 +101,6 @@ static CSharpUtf8StringHelperCallback SWIG_csharp_string_callback = NULL;
101101
102102 return unmanagedString;
103103 }
104-
105- public static byte[] StringToUtf8Bytes (string str)
106- {
107- if (str == null)
108- return null;
109-
110- int bytecount = System.Text .Encoding .UTF8 .GetByteCount (str);
111- byte[] bytes = new byte[bytecount + 1 ];
112- System.Text .Encoding .UTF8 .GetBytes (str, 0 , str.Length , bytes, 0 );
113- return bytes;
114- }
115104%}
116105
117106%insert(runtime) %{
@@ -129,18 +118,35 @@ SWIGEXPORT void SWIGSTDCALL RegisterUtf8StringCallback_$module(CSharpUtf8StringH
129118
130119/* Changing csin and imtype typemaps for string types defined by SWIG in csharp.swg */
131120
132- %typemap (imtype, out=" IntPtr" ) (char *), (char *&), (char [ANY]), (char []), (const char *utf8_string) " byte[]"
121+ %typemap (cstype) (char *), (char *&), (char [ANY]), (char []), (const char *utf8_string) " string"
122+ %typemap (imtype) (char *), (char *&), (char [ANY]), (char []), (const char *utf8_string) " IntPtr"
133123
134124%typemap (in) (char *), (char *&), (char [ANY]), (char []), (const char *utf8_string) %{
135125 $1 = ($1_ltype)$input;
136126%}
137127
138- %typemap (out) (char *), (char *&), (char [ANY]), (char []), (const char *utf8_string)
139- %{
128+ %typemap (out) (char *), (char *&), (char [ANY]), (char []), (const char *utf8_string) %{
140129 $result = SWIG_csharp_string_callback ((const char *)$1 );
141130%}
142131
143- %typemap (csin) (char *), (char *&), (char [ANY]), (char []), (const char *utf8_string) " $modulePINVOKE.StringToUtf8Bytes($csinput)"
132+ %typemap (csin,
133+ pre =" IntPtr temp$csinput = $modulePINVOKE.StringToUtf8Unmanaged($csinput);" ,
134+ post =" Marshal.FreeHGlobal(temp$csinput);" ,
135+ cshin=" $csinput"
136+ ) (char *), (char *&), (char [ANY]), (char []), (const char *utf8_string)
137+ " temp$csinput"
138+
139+ %typemap (csvarin, excode=SWIGEXCODE2) (char *), (char *&), (char [ANY]), (char []), (const char *utf8_string) %{
140+ /* %typemap(csvarin) (char *), (char *&), (char[ANY]), (char[]), (const char *utf8_string) */
141+ set {
142+ IntPtr temp$csinput = $modulePINVOKE.StringToUtf8Unmanaged ($csinput);
143+ try {
144+ $imcall;$excode
145+ }
146+ finally {
147+ Marshal.FreeHGlobal (temp$csinput);
148+ }
149+ } %}
144150
145151%typemap (csout, excode=SWIGEXCODE) (char *), (char *&), (char [ANY]), (char []), (const char *utf8_string)
146152 {
0 commit comments