Browse Source

Added better wrapping for out parameters.

pull/1/head
triton 13 years ago
parent
commit
d531e40e5f
  1. 33
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs

33
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -1146,17 +1146,15 @@ namespace CppSharp.Generators.CSharp @@ -1146,17 +1146,15 @@ namespace CppSharp.Generators.CSharp
if (param.Usage == ParameterUsage.Out)
{
//var paramType = param.Type;
//if (paramType.IsReference())
// paramType = (paramType as PointerType).Pointee;
var paramType = param.Type;
//var typePrinter = new CppTypePrinter(Driver.TypeDatabase);
//var type = paramType.Visit(typePrinter);
//WriteLine("{0} {1};", type, argName);
}
else
Class @class;
if (paramType.Desugar().IsTagDecl(out @class) && @class.IsRefType)
{
WriteLine("{0} = new {1}();", param.Name, paramType);
}
}
var ctx = new CSharpMarshalContext(Driver)
{
Parameter = param,
@ -1177,11 +1175,23 @@ namespace CppSharp.Generators.CSharp @@ -1177,11 +1175,23 @@ namespace CppSharp.Generators.CSharp
Write(marshal.Context.SupportBefore);
WriteLine("var {0} = {1};", SafeIdentifier(argName), marshal.Context.Return);
}
return paramMarshal;
}
static string GetParameterUsage(ParameterUsage usage)
{
switch (usage)
{
case ParameterUsage.Out:
return "out ";
case ParameterUsage.InOut:
return "ref";
default:
return string.Empty;
}
}
private void GenerateMethodParameters(Method method, Class @class)
{
var @params = new List<string>();
@ -1193,7 +1203,8 @@ namespace CppSharp.Generators.CSharp @@ -1193,7 +1203,8 @@ namespace CppSharp.Generators.CSharp
if (param.Kind == ParameterKind.HiddenStructureReturn)
continue;
@params.Add(string.Format("{0} {1}", param.Type, SafeIdentifier(param.Name)));
@params.Add(string.Format("{0}{1} {2}", GetParameterUsage(param.Usage),
param.Type, SafeIdentifier(param.Name)));
}
Write(string.Join(", ", @params));

Loading…
Cancel
Save