|
|
|
@ -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)); |
|
|
|
|