From fc54f7189329f3892d2e0e981c095605f59853e2 Mon Sep 17 00:00:00 2001 From: Abhinav Tripathi Date: Tue, 16 Jun 2015 08:58:19 +0530 Subject: [PATCH] Fixed code gen when using non primitive pointer type CS_OUT args. --- src/Generator/Generators/CLI/CLISourcesTemplate.cs | 3 +++ src/Generator/Generators/CSharp/CSharpTextTemplate.cs | 3 ++- tests/Basic/Basic.h | 11 +++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) 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) { }