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.