Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
@ -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;
@ -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 ?
@ -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
@ -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;
@ -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[]);