Browse Source

Fixed code gen when using non primitive pointer type CS_OUT args.

pull/487/head
Abhinav Tripathi 10 years ago
parent
commit
fc54f71893
  1. 3
      src/Generator/Generators/CLI/CLISourcesTemplate.cs
  2. 3
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs
  3. 11
      tests/Basic/Basic.h

3
src/Generator/Generators/CLI/CLISourcesTemplate.cs

@ -983,6 +983,9 @@ namespace CppSharp.Generators.CLI @@ -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)

3
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -2523,7 +2523,8 @@ namespace CppSharp.Generators.CSharp @@ -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);
}

11
tests/Basic/Basic.h

@ -741,3 +741,14 @@ public: @@ -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) { }

Loading…
Cancel
Save