From 0930360cd5829ea99a9fdfd2742edb8cbd727922 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Tue, 4 Aug 2015 22:25:35 +0300 Subject: [PATCH] Ensured conversion operators from primitive pointers pass the correct values. Signed-off-by: Dimitar Dobrev --- src/Generator/Generators/CSharp/CSharpTextTemplate.cs | 10 ++++++---- tests/CSharpTemp/CSharpTemp.Tests.cs | 2 ++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs index 060cc849..9dc32927 100644 --- a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs +++ b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs @@ -2283,12 +2283,14 @@ namespace CppSharp.Generators.CSharp Class @interface = null; if (paramType.TryGetClass(out paramClass)) @interface = paramClass.Namespace.Classes.Find(c => c.OriginalClass == paramClass); + + var paramName = string.Format("{0}{1}", + method.Parameters[0].IsPrimitiveParameterConvertibleToRef() ? "ref *" : string.Empty, + method.Parameters[0].Name); if (@interface != null) - WriteLine("return new {0}(({2}) {1});", method.ConversionType, - method.Parameters[0].Name, @interface.Name); + WriteLine("return new {0}(({2}) {1});", method.ConversionType, paramName, @interface.Name); else - WriteLine("return new {0}({1});", method.ConversionType, - method.Parameters[0].Name); + WriteLine("return new {0}({1});", method.ConversionType, paramName); } else { diff --git a/tests/CSharpTemp/CSharpTemp.Tests.cs b/tests/CSharpTemp/CSharpTemp.Tests.cs index 6aedbbaf..90ba587e 100644 --- a/tests/CSharpTemp/CSharpTemp.Tests.cs +++ b/tests/CSharpTemp/CSharpTemp.Tests.cs @@ -350,6 +350,8 @@ public class CSharpTempTests : GeneratorTestFixture public unsafe void TestMultiOverLoadPtrToRef() { var r = 0; + MultiOverloadPtrToRef m = &r; + m.Dispose(); var obj = new MultiOverloadPtrToRef(ref r); var p = obj.ReturnPrimTypePtr(); Assert.AreEqual(0, p[0]);