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]);