Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
AnsiBSTRMarshaler.cs
Go to the documentation of this file.
2
4
5internal static class AnsiBSTRMarshaler
6{
7 internal unsafe static IntPtr ConvertToNative(int flags, string strManaged)
8 {
9 if (strManaged == null)
10 {
11 return IntPtr.Zero;
12 }
13 byte[] array = null;
14 int cbLength = 0;
15 if (strManaged.Length > 0)
16 {
17 array = AnsiCharMarshaler.DoAnsiConversion(strManaged, (flags & 0xFF) != 0, flags >> 8 != 0, out cbLength);
18 }
19 uint num = (uint)cbLength;
20 IntPtr intPtr = Marshal.AllocBSTRByteLen(num);
21 if (array != null)
22 {
23 Buffer.Memmove(ref *(byte*)(void*)intPtr, ref MemoryMarshal.GetArrayDataReference(array), num);
24 }
25 return intPtr;
26 }
27
28 internal unsafe static string ConvertToManaged(IntPtr bstr)
29 {
30 if (IntPtr.Zero == bstr)
31 {
32 return null;
33 }
34 return new string((sbyte*)(void*)bstr);
35 }
36
37 internal static void ClearNative(IntPtr pNative)
38 {
39 Marshal.FreeBSTR(pNative);
40 }
41}
static void Memmove(ref byte dest, ref byte src, nuint len)
Definition Buffer.cs:215
static IntPtr AllocBSTRByteLen(uint length)
Definition Marshal.cs:1740
static void FreeBSTR(IntPtr ptr)
Definition Marshal.cs:1750
static unsafe ref byte GetArrayDataReference(Array array)
static unsafe string ConvertToManaged(IntPtr bstr)
static unsafe IntPtr ConvertToNative(int flags, string strManaged)
static void ClearNative(IntPtr pNative)
static unsafe byte[] DoAnsiConversion(string str, bool fBestFit, bool fThrowOnUnmappableChar, out int cbLength)
static readonly IntPtr Zero
Definition IntPtr.cs:18