diff --git a/src/Generator/Generators/CLI/CLISourcesTemplate.cs b/src/Generator/Generators/CLI/CLISourcesTemplate.cs index 7063e06b..1b59bd51 100644 --- a/src/Generator/Generators/CLI/CLISourcesTemplate.cs +++ b/src/Generator/Generators/CLI/CLISourcesTemplate.cs @@ -983,6 +983,9 @@ namespace CppSharp.Generators.CLI if(param.Usage != ParameterUsage.Out && param.Usage != ParameterUsage.InOut) continue; + if (param.Type.IsPointer() && !param.Type.GetFinalPointee().IsPrimitiveType()) + param.QualifiedType = new QualifiedType(param.Type.GetFinalPointee()); + var nativeVarName = paramInfo.Name; var ctx = new MarshalContext(Driver) diff --git a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs index eea86a11..9892314c 100644 --- a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs +++ b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs @@ -2523,7 +2523,8 @@ namespace CppSharp.Generators.CSharp var paramType = param.Type; Class @class; - if (paramType.Desugar().TryGetClass(out @class) && @class.IsRefType) + if ( (paramType.GetFinalPointee() ?? paramType).Desugar().TryGetClass(out @class) + && @class.IsRefType) { WriteLine("{0} = new {1}();", param.Name, paramType); } diff --git a/tests/Basic/Basic.h b/tests/Basic/Basic.h index 69d34e92..0daef970 100644 --- a/tests/Basic/Basic.h +++ b/tests/Basic/Basic.h @@ -741,3 +741,14 @@ public: } acmyk; } ct; }; + +#define CS_API +class CS_API ClassPassTry +{ +public: + int n; + char c; +}; + +void funcTry(CS_OUT ClassPassTry* classTry) { } +void funcTry2(CS_OUT ClassPassTry classTry) { }