Browse Source

Added C# marshalling of parameters of type array of const char*.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/955/head
Dimitar Dobrev 8 years ago
parent
commit
37b3339e71
  1. 3
      src/Generator/Generators/CSharp/CSharpMarshal.cs
  2. 6
      src/Generator/Generators/CSharp/CSharpTypePrinter.cs
  3. 7
      tests/CSharp/CSharp.Tests.cs
  4. 10
      tests/CSharp/CSharp.cpp
  5. 2
      tests/CSharp/CSharp.h

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

@ -854,7 +854,8 @@ namespace CppSharp.Generators.CSharp @@ -854,7 +854,8 @@ namespace CppSharp.Generators.CSharp
private void MarshalVariableArray(Type arrayType)
{
if (arrayType.IsPrimitiveType())
if (arrayType.IsPrimitiveType() ||
arrayType.IsPointerToPrimitiveType(PrimitiveType.Char))
{
Context.Return.Write(Context.Parameter.Name);
return;

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

@ -126,7 +126,11 @@ namespace CppSharp.Generators.CSharp @@ -126,7 +126,11 @@ namespace CppSharp.Generators.CSharp
return "string";
if (arrayType.IsPointerToPrimitiveType(PrimitiveType.Char))
return "char**";
{
var prefix = ContextKind == TypePrinterContextKind.Managed ? string.Empty :
"[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)] ";
return $"{prefix}string[]";
}
var arraySuffix = array.SizeType != ArrayType.ArraySize.Constant &&
MarshalKind == MarshalKind.ReturnVariableArray ?

7
tests/CSharp/CSharp.Tests.cs

@ -1069,6 +1069,13 @@ public unsafe class CSharpTests : GeneratorTestFixture @@ -1069,6 +1069,13 @@ public unsafe class CSharpTests : GeneratorTestFixture
Assert.That(CSharp.CSharp.TakeArrays(pointers, ints, values), Is.EqualTo(50));
}
[Test]
public void TestStringArrayParams()
{
string[] strings = { "The ", "test ", "works." };
Assert.That(CSharp.CSharp.TakeStringArray(strings), Is.EqualTo("The test works."));
}
private class OverrideVirtualTemplate : VirtualTemplate<int>
{
public override int Function

10
tests/CSharp/CSharp.cpp

@ -1398,3 +1398,13 @@ int takeArrays(Foo* arrayOfPointersToObjects[], int arrayOfPrimitives[], Foo arr @@ -1398,3 +1398,13 @@ int takeArrays(Foo* arrayOfPointersToObjects[], int arrayOfPrimitives[], Foo arr
arrayOfPrimitives[0] + arrayOfPrimitives[1] +
arrayOfObjects[0].A + arrayOfObjects[1].A;
}
std::string takeStringArray(const char* arrayOfStrings[])
{
std::string result;
for (int i = 0; i < 3; i++)
{
result += arrayOfStrings[i];
}
return result;
}

2
tests/CSharp/CSharp.h

@ -1238,3 +1238,5 @@ inline namespace InlineNamespace @@ -1238,3 +1238,5 @@ inline namespace InlineNamespace
}
DLL_API int takeArrays(Foo* arrayOfPointersToObjects[], int arrayOfPrimitives[], Foo arrayOfObjects[]);
DLL_API std::string takeStringArray(const char* arrayOfStrings[]);

Loading…
Cancel
Save