Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ConvertArrayToNative()

unsafe IntPtr System.StubHelpers.AsAnyMarshaler.ConvertArrayToNative ( object pManagedHome,
int dwFlags )
inlineprivate

Definition at line 59 of file AsAnyMarshaler.cs.

60 {
61 Type elementType = pManagedHome.GetType().GetElementType();
62 VarEnum varEnum = VarEnum.VT_EMPTY;
63 switch (Type.GetTypeCode(elementType))
64 {
65 case TypeCode.SByte:
66 varEnum = VarEnum.VT_I1;
67 break;
68 case TypeCode.Byte:
69 varEnum = VarEnum.VT_UI1;
70 break;
71 case TypeCode.Int16:
72 varEnum = VarEnum.VT_I2;
73 break;
74 case TypeCode.UInt16:
75 varEnum = VarEnum.VT_UI2;
76 break;
77 case TypeCode.Int32:
78 varEnum = VarEnum.VT_I4;
79 break;
80 case TypeCode.UInt32:
81 varEnum = VarEnum.VT_UI4;
82 break;
83 case TypeCode.Int64:
84 varEnum = VarEnum.VT_I8;
85 break;
86 case TypeCode.UInt64:
87 varEnum = VarEnum.VT_UI8;
88 break;
89 case TypeCode.Single:
90 varEnum = VarEnum.VT_R4;
91 break;
92 case TypeCode.Double:
93 varEnum = VarEnum.VT_R8;
94 break;
95 case TypeCode.Char:
96 varEnum = (IsAnsi(dwFlags) ? ((VarEnum)253) : VarEnum.VT_UI2);
97 break;
98 case TypeCode.Boolean:
99 varEnum = (VarEnum)254;
100 break;
101 case TypeCode.Object:
102 if (elementType == typeof(IntPtr))
103 {
104 _ = IntPtr.Size;
105 varEnum = VarEnum.VT_I8;
106 break;
107 }
108 if (elementType == typeof(UIntPtr))
109 {
110 _ = IntPtr.Size;
111 varEnum = VarEnum.VT_UI8;
112 break;
113 }
114 goto default;
115 default:
116 throw new ArgumentException(SR.Arg_NDirectBadObject);
117 }
118 int num = (int)varEnum;
119 if (IsBestFit(dwFlags))
120 {
121 num |= 0x10000;
122 }
123 if (IsThrowOn(dwFlags))
124 {
125 num |= 0x1000000;
126 }
127 MngdNativeArrayMarshaler.CreateMarshaler(pvArrayMarshaler, IntPtr.Zero, num, IntPtr.Zero);
128 System.Runtime.CompilerServices.Unsafe.SkipInit(out IntPtr result);
129 IntPtr pNativeHome = new IntPtr(&result);
130 MngdNativeArrayMarshaler.ConvertSpaceToNative(pvArrayMarshaler, ref pManagedHome, pNativeHome);
131 if (IsIn(dwFlags))
132 {
133 MngdNativeArrayMarshaler.ConvertContentsToNative(pvArrayMarshaler, ref pManagedHome, pNativeHome);
134 }
135 if (IsOut(dwFlags))
136 {
137 backPropAction = BackPropAction.Array;
138 }
139 return result;
140 }
static bool IsAnsi(int dwFlags)
static bool IsThrowOn(int dwFlags)
static bool IsIn(int dwFlags)
static bool IsOut(int dwFlags)
static bool IsBestFit(int dwFlags)

References System.SR.Arg_NDirectBadObject, System.StubHelpers.AsAnyMarshaler.backPropAction, System.StubHelpers.MngdNativeArrayMarshaler.ConvertContentsToNative(), System.StubHelpers.MngdNativeArrayMarshaler.ConvertSpaceToNative(), System.StubHelpers.MngdNativeArrayMarshaler.CreateMarshaler(), System.elementType, System.Type.GetTypeCode(), System.StubHelpers.AsAnyMarshaler.IsAnsi(), System.StubHelpers.AsAnyMarshaler.IsBestFit(), System.StubHelpers.AsAnyMarshaler.IsIn(), System.StubHelpers.AsAnyMarshaler.IsOut(), System.StubHelpers.AsAnyMarshaler.IsThrowOn(), System.StubHelpers.AsAnyMarshaler.pvArrayMarshaler, System.IntPtr.Size, and System.IntPtr.Zero.

Referenced by System.StubHelpers.AsAnyMarshaler.ConvertToNative().