diff --git a/Source/SharpDX/Utilities.cs b/Source/SharpDX/Utilities.cs index 13c1dd2a7..8bd6ef97e 100644 --- a/Source/SharpDX/Utilities.cs +++ b/Source/SharpDX/Utilities.cs @@ -502,7 +502,11 @@ public unsafe static void FreeMemory(IntPtr alignedBuffer) /// The converted string. public static string PtrToStringAnsi(IntPtr pointer, int maxLength) { - return Marshal.PtrToStringAnsi(pointer, maxLength); + string managedString = Marshal.PtrToStringAnsi(pointer); // copy null-terminating unmanaged text from pointer to a managed string + if (managedString != null && managedString.Length > maxLength) + managedString = managedString.Substring(0, maxLength); + + return managedString; } /// @@ -513,10 +517,14 @@ public static string PtrToStringAnsi(IntPtr pointer, int maxLength) /// The converted string. public static string PtrToStringUni(IntPtr pointer, int maxLength) { - return Marshal.PtrToStringUni(pointer, maxLength); + string managedString = Marshal.PtrToStringUni(pointer); // copy null-terminating unmanaged text from pointer to a managed string + if (managedString != null && managedString.Length > maxLength) + managedString = managedString.Substring(0, maxLength); + + return managedString; } - /// + /// /// Copies the contents of a managed String into unmanaged memory, converting into ANSI format as it copies. /// /// A managed string to be copied.