Skip to content

Commit 9c06b91

Browse files
committed
Make CompareString parameters constant
1 parent 50882f6 commit 9c06b91

File tree

2 files changed

+86
-16
lines changed

2 files changed

+86
-16
lines changed

src-native/THNETII.WinApi.Headers.WinNls/WinNlsFunctions.cs

Lines changed: 80 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,29 @@ private static extern CSTR_RESULT CompareStringA(
358358
[In] int cchCount2
359359
);
360360

361+
/// <inheritdoc cref="CompareString"/>
362+
[Obsolete("DEPRECATED: StringApiSetFunction.CompareStringEx is preferred")]
363+
public unsafe static CSTR_RESULT CompareStringA(
364+
int Locale,
365+
CSTR_FLAGS dwCmpFlags,
366+
ReadOnlySpan<byte> lpString1,
367+
int cchCount1,
368+
ReadOnlySpan<byte> lpString2,
369+
int cchCount2
370+
)
371+
{
372+
fixed (byte* ptrString1 = lpString1)
373+
fixed (byte* ptrString2 = lpString2)
374+
return CompareStringA(
375+
Locale,
376+
dwCmpFlags,
377+
Pointer.Create<LPCSTR>(ptrString1),
378+
cchCount1,
379+
Pointer.Create<LPCSTR>(ptrString2),
380+
cchCount2
381+
);
382+
}
383+
361384
/// <inheritdoc cref="CompareString"/>
362385
[Obsolete("DEPRECATED: StringApiSetFunction.CompareStringEx is preferred")]
363386
[SuppressMessage("Globalization",
@@ -369,9 +392,9 @@ public static extern CSTR_RESULT CompareStringA(
369392
[In] int Locale,
370393
[In, MarshalAs(UnmanagedType.I4)]
371394
CSTR_FLAGS dwCmpFlags,
372-
[In] LPSTR lpString1,
395+
[In] LPCSTR lpString1,
373396
[In] int cchCount1,
374-
[In] LPSTR lpString2,
397+
[In] LPCSTR lpString2,
375398
[In] int cchCount2
376399
);
377400
#endregion
@@ -405,16 +428,36 @@ private static extern CSTR_RESULT CompareStringW(
405428
[In] int cchCount2
406429
);
407430

431+
/// <inheritdoc cref="CompareString"/>
432+
public unsafe static CSTR_RESULT CompareStringW(
433+
int Locale,
434+
CSTR_FLAGS dwCmpFlags,
435+
ReadOnlySpan<char> lpString1,
436+
ReadOnlySpan<char> lpString2
437+
)
438+
{
439+
fixed (char* ptrString1 = lpString1)
440+
fixed (char* ptrString2 = lpString2)
441+
return CompareStringW(
442+
Locale,
443+
dwCmpFlags,
444+
Pointer.Create<LPCWSTR>(ptrString1),
445+
lpString1.Length,
446+
Pointer.Create<LPCWSTR>(ptrString2),
447+
lpString2.Length
448+
);
449+
}
450+
408451
/// <inheritdoc cref="CompareString"/>
409452
[DllImport(Kernel32, CallingConvention = CallingConvention.Winapi, SetLastError = true, CharSet = CharSet.Unicode)]
410453
[return: MarshalAs(UnmanagedType.I4)]
411454
public static extern CSTR_RESULT CompareStringW(
412455
[In] int Locale,
413456
[In, MarshalAs(UnmanagedType.I4)]
414457
CSTR_FLAGS dwCmpFlags,
415-
[In] LPWSTR lpString1,
458+
[In] LPCWSTR lpString1,
416459
[In] int cchCount1,
417-
[In] LPWSTR lpString2,
460+
[In] LPCWSTR lpString2,
418461
[In] int cchCount2
419462
);
420463
#endregion
@@ -510,6 +553,29 @@ [In] int cchCount2
510553
};
511554
#endif
512555

556+
/// <inheritdoc cref="CompareString"/>
557+
[Obsolete("DEPRECATED: StringApiSetFunction.CompareStringEx is preferred")]
558+
public unsafe static CSTR_RESULT CompareString(
559+
int Locale,
560+
CSTR_FLAGS dwCmpFlags,
561+
ReadOnlySpan<byte> lpString1,
562+
int cchCount1,
563+
ReadOnlySpan<byte> lpString2,
564+
int cchCount2
565+
)
566+
{
567+
fixed (byte* ptrString1 = lpString1)
568+
fixed (byte* ptrString2 = lpString2)
569+
return CompareString(
570+
Locale,
571+
dwCmpFlags,
572+
Pointer.Create<LPCTSTR>(ptrString1),
573+
cchCount1,
574+
Pointer.Create<LPCTSTR>(ptrString2),
575+
cchCount2
576+
);
577+
}
578+
513579
/// <inheritdoc cref="CompareString"/>
514580
[Obsolete("DEPRECATED: StringApiSetFunction.CompareStringEx is preferred")]
515581
#if !NETSTANDARD1_3
@@ -526,9 +592,9 @@ CSTR_RESULT CompareString(
526592
[In] int Locale,
527593
[In, MarshalAs(UnmanagedType.I4)]
528594
CSTR_FLAGS dwCmpFlags,
529-
[In] LPTSTR lpString1,
595+
[In] LPCTSTR lpString1,
530596
[In] int cchCount1,
531-
[In] LPTSTR lpString2,
597+
[In] LPCTSTR lpString2,
532598
[In] int cchCount2
533599
)
534600
#if !NETSTANDARD1_3
@@ -537,14 +603,18 @@ [In] int cchCount2
537603
=> Marshal.SystemDefaultCharSize switch
538604
{
539605
1 => CompareStringA(Locale, dwCmpFlags,
540-
Pointer.Create<LPSTR>(lpString1.Pointer), cchCount1,
541-
Pointer.Create<LPSTR>(lpString2.Pointer), cchCount2),
606+
Pointer.Create<LPCSTR>(lpString1.Pointer), cchCount1,
607+
Pointer.Create<LPCSTR>(lpString2.Pointer), cchCount2),
542608
2 => CompareStringW(Locale, dwCmpFlags,
543-
Pointer.Create<LPWSTR>(lpString1.Pointer), cchCount1,
544-
Pointer.Create<LPWSTR>(lpString2.Pointer), cchCount2),
609+
Pointer.Create<LPCWSTR>(lpString1.Pointer), cchCount1,
610+
Pointer.Create<LPCWSTR>(lpString2.Pointer), cchCount2),
545611
_ => throw new PlatformNotSupportedException()
546612
};
547613
#endif
548614
#endregion
615+
// C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\WinNls.h, line 1626
616+
#region FindNLSString function
617+
618+
#endregion
549619
}
550620
}

test/THNETII.WinApi.Native.Test/WinNls.Test/CompareString.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ public static void CanCallExternFunctionStringAnsi()
3030
[Obsolete("Deprecated Win API")]
3131
public static void CanCallExternFunctionLpStr()
3232
{
33-
var str1 = Pointer.Create<LPSTR>(Marshal.StringToCoTaskMemAnsi(nameof(CompareString)));
34-
var str2 = Pointer.Create<LPSTR>(Marshal.StringToCoTaskMemAnsi(nameof(CompareString)));
33+
var str1 = Pointer.Create<LPCSTR>(Marshal.StringToCoTaskMemAnsi(nameof(CompareString)));
34+
var str2 = Pointer.Create<LPCSTR>(Marshal.StringToCoTaskMemAnsi(nameof(CompareString)));
3535

3636
try
3737
{
@@ -64,8 +64,8 @@ public static void CanCallExternFunctionStringUnicode()
6464
[FactWindowsOS]
6565
public static void CanCallExternFunctionLpWStr()
6666
{
67-
var str1 = Pointer.Create<LPWSTR>(Marshal.StringToCoTaskMemUni(nameof(CompareString)));
68-
var str2 = Pointer.Create<LPWSTR>(Marshal.StringToCoTaskMemUni(nameof(CompareString)));
67+
var str1 = Pointer.Create<LPCWSTR>(Marshal.StringToCoTaskMemUni(nameof(CompareString)));
68+
var str2 = Pointer.Create<LPCWSTR>(Marshal.StringToCoTaskMemUni(nameof(CompareString)));
6969

7070
try
7171
{
@@ -100,8 +100,8 @@ public static void CanCallExternFunctionStringAuto()
100100
[Obsolete("Deprecated Win API")]
101101
public static void CanCallExternFunctionLpTStr()
102102
{
103-
var str1 = Pointer.Create<LPTSTR>(Marshal.StringToCoTaskMemAuto(nameof(CompareString)));
104-
var str2 = Pointer.Create<LPTSTR>(Marshal.StringToCoTaskMemAuto(nameof(CompareString)));
103+
var str1 = Pointer.Create<LPCTSTR>(Marshal.StringToCoTaskMemAuto(nameof(CompareString)));
104+
var str2 = Pointer.Create<LPCTSTR>(Marshal.StringToCoTaskMemAuto(nameof(CompareString)));
105105

106106
try
107107
{

0 commit comments

Comments
 (0)