Browse Source

Fixed marshaling of regular UTF16 strings.

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

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

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

Loading…
Cancel
Save