69,74c69,71
< 		internal static string string_from_bytes (byte[] data, int pos, int len) {
< 			char[] chars = new char [len];
< 			// FIXME: use a utf8 decoder here
< 			for (int i = 0; i < len; ++i)
< 				chars [i] = (char)data [pos + i];
< 			return new String (chars);
---
>         internal static string string_from_bytes (byte[] data, int pos, int len) 
>         {
>             return System.Text.Encoding.UTF8.GetString(data, pos, len);
78a76
> 
79a78
>             int sizeConst = 0;
92,93c91,96
< 			for (int i = 0; i < nnamed; ++i) {
< 				byte type = data [pos++];
---
> 			for (int i = 0; i < nnamed; ++i)
>             {
>                 int paramType; // What is this ?
>                 paramType = (int)data [pos++];
>                 paramType |= ((int)data [pos++]) << 8;
> 
96a100
> 
104a109,115
>                 case "SizeConst":
>                     value = (int)data [pos++];
>                     value |= ((int)data [pos++]) << 8;
>                     value |= ((int)data [pos++]) << 16;
>                     value |= ((int)data [pos++]) << 24;
>                     sizeConst = value;
>                     break;
110c121,122
< 			switch ((UnmanagedType)utype) {
---
>             switch ((UnmanagedType)utype) 
>             {
115a128
>                     return UnmanagedMarshal.DefineByValArray(sizeConst);
116a130
>                     return UnmanagedMarshal.DefineByValTStr(sizeConst);
