diff --git a/src/Generator/Generators/CSharp/CSharpSources.cs b/src/Generator/Generators/CSharp/CSharpSources.cs index 89b175ae..a816e2da 100644 --- a/src/Generator/Generators/CSharp/CSharpSources.cs +++ b/src/Generator/Generators/CSharp/CSharpSources.cs @@ -880,12 +880,12 @@ namespace CppSharp.Generators.CSharp var arrayType = var.Type as ArrayType; string ptr = Generator.GeneratedIdentifier("ptr"); - if (arrayType != null && var.Namespace is Class @class && @class.IsRefType) + if (arrayType != null) { - WriteLine($@"var {ptr} = { - (arrayType.Type.IsPrimitiveType(PrimitiveType.Char) && - arrayType.QualifiedType.Qualifiers.IsConst ? - string.Empty : "(byte*)")}{location};"); + if (arrayType.Type.IsPrimitiveType(PrimitiveType.Char) && arrayType.SizeType != ArrayType.ArraySize.Constant) + WriteLine($@"var {ptr} = {location};"); + else + WriteLine($@"var {ptr} = ({arrayType.Type.Visit(TypePrinter)}*){location};"); } else { diff --git a/tests/CSharp/CSharp.Tests.cs b/tests/CSharp/CSharp.Tests.cs index 2dd953ef..546ae57e 100644 --- a/tests/CSharp/CSharp.Tests.cs +++ b/tests/CSharp/CSharp.Tests.cs @@ -734,6 +734,20 @@ public unsafe class CSharpTests : GeneratorTestFixture Assert.That(CSharp.CSharp.VariableWithVariablePrimitiveArray[1], Is.EqualTo(20)); } + [Test] + public void TestStaticVariables() + { + Assert.That(StaticVariables.Boolean, Is.EqualTo(true)); + Assert.That(StaticVariables.Chr, Is.EqualTo('G')); + Assert.That(StaticVariables.UChr, Is.EqualTo('G')); + Assert.That(StaticVariables.Int, Is.EqualTo(1020304050)); + Assert.That(StaticVariables.Float, Is.EqualTo(0.5020f)); + Assert.That(StaticVariables.String, Is.EqualTo("Str")); + Assert.That(StaticVariables.ChrArray, Is.EqualTo(new[] { 'A', 'B'})); + Assert.That(StaticVariables.IntArray, Is.EqualTo(new[] { 1020304050 , 1526374850 })); + Assert.That(StaticVariables.FloatArray, Is.EqualTo(new[] { 0.5020f, 0.6020f })); + } + [Test] public void TestPointerPassedAsItsSecondaryBase() { diff --git a/tests/CSharp/CSharp.cpp b/tests/CSharp/CSharp.cpp index 97ea620e..8388fa13 100644 --- a/tests/CSharp/CSharp.cpp +++ b/tests/CSharp/CSharp.cpp @@ -1400,6 +1400,16 @@ bool HasVirtualTakesReturnsProblematicTypes::callsVirtualToReturnBool(bool b) extern const unsigned char variableWithFixedPrimitiveArray[2] = { 5, 10 }; extern const unsigned int variableWithVariablePrimitiveArray[] = { 15, 20 }; +const bool StaticVariables::Boolean = true; +const char StaticVariables::Chr = 'G'; +const unsigned char StaticVariables::UChr = (unsigned char)'G'; +const int StaticVariables::Int = 1020304050; +const float StaticVariables::Float = 0.5020f; +const std::string StaticVariables::String = "Str"; +const char StaticVariables::ChrArray[2] { 'A', 'B' }; +const int StaticVariables::IntArray[2] { 1020304050, 1526374850 }; +const float StaticVariables::FloatArray[2] { 0.5020f, 0.6020f }; + TestString::TestString() : unicodeConst(L"ქართული ენა"), unicode(0) { } diff --git a/tests/CSharp/CSharp.h b/tests/CSharp/CSharp.h index efe9c2b4..e695fbd6 100644 --- a/tests/CSharp/CSharp.h +++ b/tests/CSharp/CSharp.h @@ -1101,6 +1101,19 @@ public: DLL_API extern const unsigned char variableWithFixedPrimitiveArray[2]; DLL_API extern const unsigned int variableWithVariablePrimitiveArray[]; +class DLL_API StaticVariables { +public: + static const bool Boolean; + static const char Chr; + static const unsigned char UChr; + static const int Int; + static const float Float; + static const std::string String; + static const char ChrArray[2]; + static const int IntArray[2]; + static const float FloatArray[2]; +}; + typedef void (*ALLCAPS_UNDERSCORES)(int i); class DLL_API TestString