From 6e42ef36a68ed81c1371db6303d74e82438033d0 Mon Sep 17 00:00:00 2001 From: Alin Gherman Date: Fri, 24 Feb 2017 03:30:13 +0100 Subject: [PATCH] Add the GenerateSequentialLayout option Signed-off-by: Alin Gherman --- .../Generators/CSharp/CSharpSources.cs | 20 ++++++++++++++++--- src/Generator/Options.cs | 1 + 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/Generator/Generators/CSharp/CSharpSources.cs b/src/Generator/Generators/CSharp/CSharpSources.cs index d88c846b..6a0d12b6 100644 --- a/src/Generator/Generators/CSharp/CSharpSources.cs +++ b/src/Generator/Generators/CSharp/CSharpSources.cs @@ -561,8 +561,15 @@ namespace CppSharp.Generators.CSharp public void GenerateClassInternals(Class @class) { PushBlock(CSharpBlockKind.InternalsClass); - WriteLine("[StructLayout(LayoutKind.Explicit, Size = {0})]", - @class.Layout.Size); + if (Options.GenerateSequentialLayout) + { + WriteLine("[StructLayout(LayoutKind.Sequential)]"); + } + else + { + WriteLine("[StructLayout(LayoutKind.Explicit, Size = {0})]", + @class.Layout.Size); + } GenerateClassInternalHead(@class); WriteStartBraceIndent(); @@ -772,7 +779,14 @@ namespace CppSharp.Generators.CSharp PushBlock(CSharpBlockKind.Field); - WriteLine("[FieldOffset({0})]", field.Offset); + if (Options.GenerateSequentialLayout) + { + // For the sequential layout there is no need to set an offset + } + else + { + WriteLine("[FieldOffset({0})]", field.Offset); + } TypePrinter.PushMarshalKind(MarshalKind.NativeField); var fieldTypePrinted = field.QualifiedType.CSharpType(TypePrinter); diff --git a/src/Generator/Options.cs b/src/Generator/Options.cs index 9325003d..df2b9ba2 100644 --- a/src/Generator/Options.cs +++ b/src/Generator/Options.cs @@ -161,6 +161,7 @@ namespace CppSharp public bool OutputInteropIncludes; public bool GenerateFunctionTemplates; public bool GenerateInternalImports; + public bool GenerateSequentialLayout; public bool UseHeaderDirectories; ///