Browse Source

Improvements to standard library interop support.

pull/1/head
triton 12 years ago
parent
commit
ab2940df62
  1. 22
      src/Generator/Types/Std/Stdlib.cs

22
src/Generator/Types/Std/Stdlib.cs

@ -34,17 +34,19 @@ namespace Cxxi.Types.Std
public override string CSharpSignature(CSharpTypePrinterContext ctx) public override string CSharpSignature(CSharpTypePrinterContext ctx)
{ {
return "string"; if (ctx.CSharpKind == CSharpTypePrinterContextKind.ManagedPointer)
return "System.IntPtr";
return "Std.String";
} }
public override void CSharpMarshalToNative(MarshalContext ctx) public override void CSharpMarshalToNative(MarshalContext ctx)
{ {
ctx.Return.Write("StringToPtr"); ctx.Return.Write("new Std.String().Instance");
} }
public override void CSharpMarshalToManaged(MarshalContext ctx) public override void CSharpMarshalToManaged(MarshalContext ctx)
{ {
ctx.Return.Write("PtrToString"); ctx.Return.Write("new Std.String({0})", ctx.ReturnVarName);
} }
} }
@ -58,12 +60,12 @@ namespace Cxxi.Types.Std
public override void CLIMarshalToNative(MarshalContext ctx) public override void CLIMarshalToNative(MarshalContext ctx)
{ {
ctx.Return.Write("marshalString<E_UTF16>({0})", ctx.Parameter.Name); ctx.Return.Write("clix::marshalString<clix::E_UTF16>({0})", ctx.Parameter.Name);
} }
public override void CLIMarshalToManaged(MarshalContext ctx) public override void CLIMarshalToManaged(MarshalContext ctx)
{ {
ctx.Return.Write("marshalString<E_UTF16>({0})", ctx.ReturnVarName); ctx.Return.Write("clix::marshalString<clix::E_UTF16>({0})", ctx.ReturnVarName);
} }
public override string CSharpSignature(CSharpTypePrinterContext ctx) public override string CSharpSignature(CSharpTypePrinterContext ctx)
@ -144,7 +146,8 @@ namespace Cxxi.Types.Std
var type = templateType.Arguments[0].Type; var type = templateType.Arguments[0].Type;
var tmpVarName = "_tmp" + ctx.ArgName; var tmpVarName = "_tmp" + ctx.ArgName;
ctx.SupportBefore.WriteLine("auto {0} = gcnew System::Collections::Generic::List<{1}>();", tmpVarName, type.ToString()); ctx.SupportBefore.WriteLine("auto {0} = gcnew System::Collections::Generic::List<{1}>();",
tmpVarName, type.ToString());
ctx.SupportBefore.WriteLine("for(auto _element : {0})",ctx.ReturnVarName); ctx.SupportBefore.WriteLine("for(auto _element : {0})",ctx.ReturnVarName);
ctx.SupportBefore.WriteStartBraceIndent(); ctx.SupportBefore.WriteStartBraceIndent();
{ {
@ -171,17 +174,18 @@ namespace Cxxi.Types.Std
public override string CSharpSignature(CSharpTypePrinterContext ctx) public override string CSharpSignature(CSharpTypePrinterContext ctx)
{ {
return string.Format("System.Collections.Generic.List<>"); return string.Format("System.Collections.Generic.List<{0}>",
ctx.GetTemplateParameterList());
} }
public override void CSharpMarshalToNative(MarshalContext ctx) public override void CSharpMarshalToNative(MarshalContext ctx)
{ {
ctx.Return.Write("StringToPtr"); ctx.Return.Write("null");
} }
public override void CSharpMarshalToManaged(MarshalContext ctx) public override void CSharpMarshalToManaged(MarshalContext ctx)
{ {
ctx.Return.Write("PtrToString"); ctx.Return.Write("null");
} }
} }

Loading…
Cancel
Save