Browse Source

Fixed null arrays in C# to be passed as such to C/C++.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/955/head
Dimitar Dobrev 8 years ago
parent
commit
184feac23e
  1. 9
      src/Generator/Generators/CSharp/CSharpMarshal.cs

9
src/Generator/Generators/CSharp/CSharpMarshal.cs

@ -862,15 +862,11 @@ namespace CppSharp.Generators.CSharp @@ -862,15 +862,11 @@ namespace CppSharp.Generators.CSharp
var intermediateArray = $"__{Context.Parameter.Name}";
var intermediateArrayType = typePrinter.PrintNative(arrayType);
var intPtrZero = $"{CSharpTypePrinter.IntPtrType}.Zero";
Context.Before.WriteLine($"{intermediateArrayType}[] {intermediateArray};");
Context.Before.WriteLine($"if (ReferenceEquals({Context.Parameter.Name}, null))");
if (arrayType.IsAddress())
Context.Before.WriteLineIndent($"{intermediateArray} = new[] {{ {intPtrZero} }};");
else
Context.Before.WriteLineIndent($"{intermediateArray} = new[] {{ new {intermediateArrayType}() }};");
Context.Before.WriteLineIndent($"{intermediateArray} = null;");
Context.Before.WriteLine("else");
Context.Before.WriteStartBraceIndent();
@ -882,8 +878,11 @@ namespace CppSharp.Generators.CSharp @@ -882,8 +878,11 @@ namespace CppSharp.Generators.CSharp
const string element = "__element";
Context.Before.WriteLine($"var {element} = {Context.Parameter.Name}[i];");
if (arrayType.IsAddress())
{
var intPtrZero = $"{CSharpTypePrinter.IntPtrType}.Zero";
Context.Before.WriteLine($@"{intermediateArray}[i] = ReferenceEquals({
element}, null) ? {intPtrZero} : {element}.{Helpers.InstanceIdentifier};");
}
else
Context.Before.WriteLine($@"{intermediateArray}[i] = ReferenceEquals({
element}, null) ? new {intermediateArrayType}() : *({

Loading…
Cancel
Save