diff --git a/src/Generator/Generators/CLI/CLIMarshal.cs b/src/Generator/Generators/CLI/CLIMarshal.cs index 890a0c2a..bd1a5e58 100644 --- a/src/Generator/Generators/CLI/CLIMarshal.cs +++ b/src/Generator/Generators/CLI/CLIMarshal.cs @@ -235,7 +235,8 @@ namespace CppSharp.Generators.CLI public void WriteClassInstance(Class @class, string instance) { if (@class.IsRefType) - Context.Return.Write("gcnew "); + Context.Return.Write("({0} == nullptr) ? nullptr : gcnew ", + instance); Context.Return.Write("{0}(", QualifiedIdentifier(@class)); Context.Return.Write("(::{0}*)", @class.QualifiedOriginalName); diff --git a/src/Generator/Generators/CSharp/CSharpMarshal.cs b/src/Generator/Generators/CSharp/CSharpMarshal.cs index c96dd291..7bae725b 100644 --- a/src/Generator/Generators/CSharp/CSharpMarshal.cs +++ b/src/Generator/Generators/CSharp/CSharpMarshal.cs @@ -294,6 +294,10 @@ namespace CppSharp.Generators.CSharp instance = instanceName; } + if (@class.IsRefType) + Context.Return.Write("({0} == IntPtr.Zero) ? null : ", + instance); + Context.Return.Write("new {0}({1})", QualifiedIdentifier(@class.OriginalClass ?? @class) + (Context.Driver.Options.GenerateAbstractImpls && @class.IsAbstract ?