diff --git a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs index 2c715c22..3bc295c7 100644 --- a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs +++ b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs @@ -1779,9 +1779,13 @@ namespace CppSharp.Generators.CSharp var isIntPtr = retTypeName.Contains("IntPtr"); - if (retType.Type.IsPointer() && isIntPtr) + Type pointee; + if (retType.Type.IsPointerTo(out pointee) && isIntPtr) { - string @null = retType.Type.IsPrimitiveType(PrimitiveType.IntPtr) ? + PrimitiveType primitive; + string @null = (pointee.Desugar().IsPrimitiveType(out primitive) || + pointee.Desugar().IsPointer()) && + !CSharpTypePrinter.IsConstCharString(retType) ? "IntPtr.Zero" : "null"; WriteLine("if ({0} == global::System.IntPtr.Zero) return {1};", Generator.GeneratedIdentifier("ret"), @null);