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

◆ CopyFromIndirect()

unsafe void System.Runtime.InteropServices.Variant.CopyFromIndirect ( object value)
inline

Definition at line 202 of file Variant.cs.

203 {
204 VarEnum varEnum = VariantType & (VarEnum)(-16385);
205 if (value == null)
206 {
207 if (varEnum == VarEnum.VT_DISPATCH || varEnum == VarEnum.VT_UNKNOWN || varEnum == VarEnum.VT_BSTR)
208 {
209 *(IntPtr*)(void*)_typeUnion._unionTypes._byref = IntPtr.Zero;
210 }
211 return;
212 }
213 if ((varEnum & VarEnum.VT_ARRAY) != 0)
214 {
215 System.Runtime.CompilerServices.Unsafe.SkipInit(out Variant variant);
216 Marshal.GetNativeVariantForObject(value, (IntPtr)(&variant));
217 *(IntPtr*)(void*)_typeUnion._unionTypes._byref = variant._typeUnion._unionTypes._byref;
218 return;
219 }
220 switch (varEnum)
221 {
222 case VarEnum.VT_I1:
223 *(sbyte*)(void*)_typeUnion._unionTypes._byref = (sbyte)value;
224 break;
225 case VarEnum.VT_UI1:
226 *(byte*)(void*)_typeUnion._unionTypes._byref = (byte)value;
227 break;
228 case VarEnum.VT_I2:
229 *(short*)(void*)_typeUnion._unionTypes._byref = (short)value;
230 break;
231 case VarEnum.VT_UI2:
232 *(ushort*)(void*)_typeUnion._unionTypes._byref = (ushort)value;
233 break;
234 case VarEnum.VT_BOOL:
235 *(short*)(void*)_typeUnion._unionTypes._byref = (short)(((bool)value) ? (-1) : 0);
236 break;
237 case VarEnum.VT_I4:
238 case VarEnum.VT_INT:
239 *(int*)(void*)_typeUnion._unionTypes._byref = (int)value;
240 break;
241 case VarEnum.VT_UI4:
242 case VarEnum.VT_UINT:
243 *(uint*)(void*)_typeUnion._unionTypes._byref = (uint)value;
244 break;
245 case VarEnum.VT_ERROR:
246 *(int*)(void*)_typeUnion._unionTypes._byref = ((ErrorWrapper)value).ErrorCode;
247 break;
248 case VarEnum.VT_I8:
249 *(long*)(void*)_typeUnion._unionTypes._byref = (long)value;
250 break;
251 case VarEnum.VT_UI8:
252 *(ulong*)(void*)_typeUnion._unionTypes._byref = (ulong)value;
253 break;
254 case VarEnum.VT_R4:
255 *(float*)(void*)_typeUnion._unionTypes._byref = (float)value;
256 break;
257 case VarEnum.VT_R8:
258 *(double*)(void*)_typeUnion._unionTypes._byref = (double)value;
259 break;
260 case VarEnum.VT_DATE:
261 *(double*)(void*)_typeUnion._unionTypes._byref = ((DateTime)value).ToOADate();
262 break;
263 case VarEnum.VT_UNKNOWN:
264 *(IntPtr*)(void*)_typeUnion._unionTypes._byref = Marshal.GetIUnknownForObject(value);
265 break;
266 case VarEnum.VT_DISPATCH:
267 *(IntPtr*)(void*)_typeUnion._unionTypes._byref = Marshal.GetIDispatchForObject(value);
268 break;
269 case VarEnum.VT_BSTR:
270 *(IntPtr*)(void*)_typeUnion._unionTypes._byref = Marshal.StringToBSTR((string)value);
271 break;
272 case VarEnum.VT_CY:
273 *(long*)(void*)_typeUnion._unionTypes._byref = decimal.ToOACurrency((decimal)value);
274 break;
275 case VarEnum.VT_DECIMAL:
276 *(decimal*)(void*)_typeUnion._unionTypes._byref = (decimal)value;
277 break;
278 case VarEnum.VT_VARIANT:
279 Marshal.GetNativeVariantForObject(value, _typeUnion._unionTypes._byref);
280 break;
281 default:
282 throw new ArgumentException();
283 }
284 }

References System.Runtime.InteropServices.Variant.UnionTypes._byref, System.Runtime.InteropServices.Variant._typeUnion, System.Runtime.InteropServices.Variant.TypeUnion._unionTypes, System.DateTime, System.Runtime.InteropServices.Marshal.GetIDispatchForObject(), System.Runtime.InteropServices.Marshal.GetIUnknownForObject(), System.Runtime.InteropServices.Marshal.GetNativeVariantForObject(), System.Runtime.InteropServices.Marshal.StringToBSTR(), System.value, System.Runtime.InteropServices.Variant.VariantType, and System.IntPtr.Zero.