diff --git a/src/Generator/Generators/CSharp/CSharpSources.cs b/src/Generator/Generators/CSharp/CSharpSources.cs index 94522128..d88c846b 100644 --- a/src/Generator/Generators/CSharp/CSharpSources.cs +++ b/src/Generator/Generators/CSharp/CSharpSources.cs @@ -2126,7 +2126,7 @@ namespace CppSharp.Generators.CSharp copyCtorMethod.IsGenerated) { // Allocate memory for a new native object and call the ctor. - WriteLine("var ret = Marshal.AllocHGlobal({0});", @class.Layout.Size); + WriteLine("var ret = Marshal.AllocHGlobal(Marshal.SizeOf(sizeof({0})));", @internal); TypePrinter.PushContext(TypePrinterContextKind.Native); WriteLine($"{@class.Visit(TypePrinter)}.{GetFunctionNativeIdentifier(copyCtorMethod)}(ret, new global::System.IntPtr(&native));", @class.Visit(TypePrinter), @@ -2136,7 +2136,7 @@ namespace CppSharp.Generators.CSharp } else { - WriteLine("var ret = Marshal.AllocHGlobal({0});", @class.Layout.Size); + WriteLine("var ret = Marshal.AllocHGlobal(Marshal.SizeOf(sizeof({0})));", @internal); WriteLine("*({0}*) ret = native;", @internal); WriteLine("return ret.ToPointer();"); } @@ -2577,8 +2577,11 @@ namespace CppSharp.Generators.CSharp private void GenerateClassConstructor(Method method, Class @class) { - WriteLine("{0} = Marshal.AllocHGlobal({1});", Helpers.InstanceIdentifier, - @class.Layout.Size); + TypePrinter.PushContext(TypePrinterContextKind.Native); + var @internal = (@class.IsAbstractImpl ? @class.BaseClass : @class).Visit(TypePrinter); + TypePrinter.PopContext(); + WriteLine("{0} = Marshal.AllocHGlobal(Marshal.SizeOf(sizeof({1})));", Helpers.InstanceIdentifier, + @internal); WriteLine("{0} = true;", Helpers.OwnsNativeInstanceIdentifier); WriteLine("NativeToManagedMap[{0}] = this;", Helpers.InstanceIdentifier);