2 using System.Diagnostics.Contracts;
3 using System.Runtime.InteropServices;
6 namespace Pithos.ShellExtensions
8 public static class MarshalHelpers
11 public static void CopyToBuffer(string input, IntPtr buffer, int bufferSize)
13 Contract.Requires(buffer != IntPtr.Zero);
14 Contract.Requires(bufferSize >=0 );
16 var bytes = Encoding.Unicode.GetBytes(input);
18 if (bytes.Length + 2 >= bufferSize)
21 for (var i = 0; i < bytes.Length; i++)
23 Marshal.WriteByte(buffer, i, bytes[i]);
25 //write the null terminator "\0\0"
26 Marshal.WriteByte(buffer, bytes.Length, 0);
27 Marshal.WriteByte(buffer, bytes.Length + 1, 0);