Nexus.Client.Games.Morrowind.PluginManagement.Boss.StringMarshaler.GetNullTerminatedStringPointer C# (CSharp) Method

GetNullTerminatedStringPointer() public static method

Returns a pointer to a unamanged, null terminated, copy the given string.
public static GetNullTerminatedStringPointer ( string p_strString, Encoding p_encEncoding ) : IntPtr
p_strString string The string for which to create a pointer.
p_encEncoding System.Text.Encoding The encoding of the string.
return System.IntPtr
		public static IntPtr GetNullTerminatedStringPointer(string p_strString, Encoding p_encEncoding)
		{
			byte[] bteString = p_encEncoding.GetBytes(p_strString);
			byte[] bteNullTerminatedString = new byte[bteString.Length + 1];
			Array.Copy(bteString, bteNullTerminatedString, bteString.Length);
			IntPtr ptrString = Marshal.AllocHGlobal(bteNullTerminatedString.Length);
			Marshal.Copy(bteNullTerminatedString, 0, ptrString, bteNullTerminatedString.Length);
			return ptrString;
		}

Usage Example

Example #1
0
 /// <summary>
 /// Marshals the given string to a pointer.
 /// </summary>
 /// <param name="ManagedObj">The string to marshal.</param>
 /// <returns>A pointer to the marshalled string.</returns>
 public IntPtr MarshalManagedToNative(string[] ManagedObj)
 {
     string[] strStrings = (string[])ManagedObj;
     if (strStrings == null)
     {
         m_ptrStringArray = IntPtr.Zero;
     }
     else
     {
         m_intArraySize = strStrings.Length;
         IntPtr[] ptrStrings = new IntPtr[m_intArraySize];
         for (Int32 i = 0; i < m_intArraySize; i++)
         {
             ptrStrings[i] = StringMarshaler.GetNullTerminatedStringPointer(strStrings[i], m_encEncoding);
         }
         m_ptrStringArray = Marshal.AllocHGlobal(m_intArraySize * IntPtr.Size);
         Marshal.Copy(ptrStrings, 0, m_ptrStringArray, m_intArraySize);
     }
     return(m_ptrStringArray);
 }