diff --git a/src/Microsoft.Windows.CsWin32/Generator.FriendlyOverloads.cs b/src/Microsoft.Windows.CsWin32/Generator.FriendlyOverloads.cs index a2441225..60fdb713 100644 --- a/src/Microsoft.Windows.CsWin32/Generator.FriendlyOverloads.cs +++ b/src/Microsoft.Windows.CsWin32/Generator.FriendlyOverloads.cs @@ -989,7 +989,7 @@ private IEnumerable DeclareFriendlyOverload( parameters[paramIndex] = externParam .WithType(PredefinedType(TokenWithSpace(SyntaxKind.StringKeyword))); - // fixed (byte* someLocal = some is object ? System.Text.Encoding.Default.GetBytes(some) : null) + // fixed (byte* someLocal = some is object ? System.Text.Encoding.Default.GetBytes(some + "\0") : null) fixedBlocks.Add(VariableDeclaration( PointerType(PredefinedType(Token(SyntaxKind.ByteKeyword))), [ @@ -1003,7 +1003,12 @@ private IEnumerable DeclareFriendlyOverload( SyntaxKind.SimpleMemberAccessExpression, ParseTypeName("global::System.Text.Encoding.Default"), IdentifierName(nameof(Encoding.GetBytes))), - [Argument(origName)]), + [ + Argument(BinaryExpression( + SyntaxKind.AddExpression, + origName, + LiteralExpression(SyntaxKind.StringLiteralExpression, Literal("\0")))) + ]), LiteralExpression(SyntaxKind.NullLiteralExpression)))) ])); diff --git a/test/GenerationSandbox.Tests/BasicTests.cs b/test/GenerationSandbox.Tests/BasicTests.cs index c671b769..cbf827e9 100644 --- a/test/GenerationSandbox.Tests/BasicTests.cs +++ b/test/GenerationSandbox.Tests/BasicTests.cs @@ -434,6 +434,13 @@ public unsafe void GetProcAddress_String() Assert.NotEqual(0u, ticks); } + [Fact] + public void PCSTR_StringOverloadNullTerminates() + { + const string value = "12345678"; + Assert.Equal(value.Length, PInvoke.lstrlen(value)); + } + [Fact] public void StructCharFieldsMarshaledAsUtf16() { diff --git a/test/GenerationSandbox.Tests/NativeMethods.txt b/test/GenerationSandbox.Tests/NativeMethods.txt index d0e25726..84a6cba0 100644 --- a/test/GenerationSandbox.Tests/NativeMethods.txt +++ b/test/GenerationSandbox.Tests/NativeMethods.txt @@ -48,6 +48,7 @@ IShellWindows IStream KEY_EVENT_RECORD LoadLibrary +lstrlen LOWORD MainAVIHeader MAKELPARAM