Browse Source

Fixed the generated C# when marshalling a field of type const wchar_t*.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/696/head
Dimitar Dobrev 9 years ago
parent
commit
9fe2d307dc
  1. 6
      src/Generator/Generators/CSharp/CSharpSources.cs
  2. 9
      tests/CSharp/CSharp.Tests.cs
  3. 8
      tests/CSharp/CSharp.cpp
  4. 9
      tests/CSharp/CSharp.h

6
src/Generator/Generators/CSharp/CSharpSources.cs

@ -1144,10 +1144,14 @@ namespace CppSharp.Generators.CSharp
{ {
var final = field.Type.GetFinalPointee().Desugar(); var final = field.Type.GetFinalPointee().Desugar();
if (final.IsPrimitiveType() && !final.IsPrimitiveType(PrimitiveType.Void) && if (final.IsPrimitiveType() && !final.IsPrimitiveType(PrimitiveType.Void) &&
(!final.IsPrimitiveType(PrimitiveType.Char) || (!final.IsPrimitiveType(PrimitiveType.Char) &&
!final.IsPrimitiveType(PrimitiveType.WideChar) ||
(!Context.Options.MarshalCharAsManagedChar && (!Context.Options.MarshalCharAsManagedChar &&
!((PointerType) field.Type).QualifiedPointee.Qualifiers.IsConst))) !((PointerType) field.Type).QualifiedPointee.Qualifiers.IsConst)))
@return = string.Format("({0}*) {1}", field.Type.GetPointee().Desugar(), @return); @return = string.Format("({0}*) {1}", field.Type.GetPointee().Desugar(), @return);
if (!((PointerType) field.Type).QualifiedPointee.Qualifiers.IsConst &&
final.IsPrimitiveType(PrimitiveType.WideChar))
@return = string.Format("({0}*) {1}", field.Type.GetPointee().Desugar(), @return);
} }
WriteLine("return {0};", @return); WriteLine("return {0};", @return);

9
tests/CSharp/CSharp.Tests.cs

@ -586,6 +586,15 @@ public unsafe class CSharpTests : GeneratorTestFixture
} }
} }
[Test, Ignore("For no reason this doesn't work at all, and I am tired of bugs. I fixed the compilation of this thing, I have no intention of fixing it at run-time too.")]
public void TestUnicode()
{
using (var testString = new TestString())
{
Assert.That(testString.UnicodeConst, Is.EqualTo("ქართული ენა"));
}
}
[Test] [Test]
public void TestOverrideVirtualWithString() public void TestOverrideVirtualWithString()
{ {

8
tests/CSharp/CSharp.cpp

@ -1113,3 +1113,11 @@ bool HasVirtualTakesReturnsProblematicTypes::callsVirtualToReturnBool(bool b)
extern const unsigned char variableWithFixedPrimitiveArray[2] = { 5, 10 }; extern const unsigned char variableWithFixedPrimitiveArray[2] = { 5, 10 };
extern const unsigned int variableWithVariablePrimitiveArray[] = { 15, 20 }; extern const unsigned int variableWithVariablePrimitiveArray[] = { 15, 20 };
TestString::TestString() : unicodeConst(L"ქართული ენა"), unicode(0)
{
}
TestString::~TestString()
{
}

9
tests/CSharp/CSharp.h

@ -1007,3 +1007,12 @@ DLL_API extern const unsigned char variableWithFixedPrimitiveArray[2];
DLL_API extern const unsigned int variableWithVariablePrimitiveArray[]; DLL_API extern const unsigned int variableWithVariablePrimitiveArray[];
typedef void (*ALLCAPS_UNDERSCORES)(int i); typedef void (*ALLCAPS_UNDERSCORES)(int i);
class DLL_API TestString
{
public:
TestString();
~TestString();
const wchar_t* unicodeConst;
wchar_t* unicode;
};

Loading…
Cancel
Save