Browse Source

Fixed const char string CS_IN_OUT case.

pull/306/head
Tom Spilman 12 years ago
parent
commit
7e8f743228
  1. 5
      src/Generator/Generators/CLI/CLISourcesTemplate.cs
  2. 5
      src/Generator/Generators/CSharp/CSharpMarshal.cs
  3. 3
      tests/Basic/Basic.Tests.cs
  4. 9
      tests/Basic/Basic.cpp
  5. 2
      tests/Basic/Basic.h

5
src/Generator/Generators/CLI/CLISourcesTemplate.cs

@ -1101,7 +1101,12 @@ namespace CppSharp.Generators.CLI @@ -1101,7 +1101,12 @@ namespace CppSharp.Generators.CLI
var type = paramType.Visit(typePrinter);
if (param.IsInOut)
{
if (!string.IsNullOrWhiteSpace(marshal.Context.SupportBefore))
Write(marshal.Context.SupportBefore);
WriteLine("{0} {1} = {2};", type, argName, marshal.Context.Return);
}
else
WriteLine("{0} {1};", type, argName);
}

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

@ -435,6 +435,11 @@ namespace CppSharp.Generators.CSharp @@ -435,6 +435,11 @@ namespace CppSharp.Generators.CSharp
Context.Return.Write("IntPtr.Zero");
CSharpContext.ArgumentPrefix.Write("&");
}
else if (Context.Parameter.IsInOut)
{
Context.Return.Write(MarshalStringToUnmanaged(Context.Parameter.Name));
CSharpContext.ArgumentPrefix.Write("&");
}
else
{
Context.Return.Write(MarshalStringToUnmanaged(Context.Parameter.Name));

3
tests/Basic/Basic.Tests.cs

@ -67,6 +67,9 @@ public class BasicTests : GeneratorTestFixture @@ -67,6 +67,9 @@ public class BasicTests : GeneratorTestFixture
Assert.That(str, Is.EqualTo("HelloStringOut"));
hello.StringOutRef(out str);
Assert.That(str, Is.EqualTo("HelloStringOutRef"));
str = "Hello";
hello.StringInOut(ref str);
Assert.That(str, Is.EqualTo("StringInOut"));
}
[Test]

9
tests/Basic/Basic.cpp

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
#include "Basic.h"
#include <string.h>
Foo::Foo()
{
@ -213,6 +214,14 @@ void Hello::StringOutRef(CS_OUT const char*& str) @@ -213,6 +214,14 @@ void Hello::StringOutRef(CS_OUT const char*& str)
str = "HelloStringOutRef";
}
void Hello::StringInOut(CS_IN_OUT const char** str)
{
if (strcmp(*str, "Hello") == 0)
*str = "StringInOut";
else
*str = "Failed";
}
int unsafeFunction(const Bar& ret, char* testForString, void (*foo)(int))
{
return ret.A;

2
tests/Basic/Basic.h

@ -135,6 +135,8 @@ public: @@ -135,6 +135,8 @@ public:
void StringOut(CS_OUT const char** str);
void StringOutRef(CS_OUT const char*& str);
void StringInOut(CS_IN_OUT const char** str);
//void StringInOutRef(CS_OUT const char*& str);
};
class DLL_API AbstractFoo

Loading…
Cancel
Save