Browse Source

Fixed marshaling of regular UTF16 strings.

pull/547/head
triton 11 years ago
parent
commit
5e3706c879
  1. 13
      src/Generator/Generators/CSharp/CSharpMarshal.cs

13
src/Generator/Generators/CSharp/CSharpMarshal.cs

@ -178,8 +178,8 @@ namespace CppSharp.Generators.CSharp
private string MarshalStringToManaged(string varName, BuiltinType type) private string MarshalStringToManaged(string varName, BuiltinType type)
{ {
var encoding = type.Type == PrimitiveType.Char ? var isChar = type.Type == PrimitiveType.Char;
Encoding.ASCII : Encoding.Unicode; var encoding = isChar ? Encoding.ASCII : Encoding.Unicode;
if (Equals(encoding, Encoding.ASCII)) if (Equals(encoding, Encoding.ASCII))
encoding = Context.Driver.Options.Encoding; encoding = Context.Driver.Options.Encoding;
@ -187,17 +187,16 @@ namespace CppSharp.Generators.CSharp
if (Equals(encoding, Encoding.ASCII)) if (Equals(encoding, Encoding.ASCII))
return string.Format("Marshal.PtrToStringAnsi({0})", varName); return string.Format("Marshal.PtrToStringAnsi({0})", varName);
if (Equals(encoding, Encoding.Unicode) || // If we reach this, we know the string is Unicode.
Equals(encoding, Encoding.BigEndianUnicode)) if (type.Type == PrimitiveType.Char ||
{ Context.Driver.TargetInfo.WCharWidth == 16)
if (Context.Driver.TargetInfo.WCharWidth == 16)
return string.Format("Marshal.PtrToStringUni({0})", varName); return string.Format("Marshal.PtrToStringUni({0})", varName);
// If we reach this, we should have an UTF-32 wide string.
const string encodingName = "System.Text.Encoding.UTF32"; const string encodingName = "System.Text.Encoding.UTF32";
return string.Format( return string.Format(
"CppSharp.Runtime.Helpers.MarshalEncodedString({0}, {1})", "CppSharp.Runtime.Helpers.MarshalEncodedString({0}, {1})",
varName, encodingName); varName, encodingName);
}
throw new NotSupportedException(string.Format("{0} is not supported yet.", throw new NotSupportedException(string.Format("{0} is not supported yet.",
Context.Driver.Options.Encoding.EncodingName)); Context.Driver.Options.Encoding.EncodingName));

Loading…
Cancel
Save