Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
EnumerableViewOfDispatch.cs
Go to the documentation of this file.
4
6
7internal sealed class EnumerableViewOfDispatch : ICustomAdapter, System.Collections.IEnumerable
8{
9 private const int DISPID_NEWENUM = -4;
10
11 private const int LCID_DEFAULT = 1;
12
13 private readonly object _dispatch;
14
16
17 public EnumerableViewOfDispatch(object dispatch)
18 {
19 _dispatch = dispatch;
20 }
21
23 {
24 System.Runtime.CompilerServices.Unsafe.SkipInit(out Variant variant);
25 void* value = &variant;
26 DISPPARAMS pDispParams = default(DISPPARAMS);
27 Guid riid = Guid.Empty;
28 Dispatch.Invoke(-4, ref riid, 1, InvokeFlags.DISPATCH_METHOD | InvokeFlags.DISPATCH_PROPERTYGET, ref pDispParams, new IntPtr(value), IntPtr.Zero, IntPtr.Zero);
29 IntPtr intPtr = IntPtr.Zero;
30 try
31 {
32 object obj = variant.ToObject();
33 if (!(obj is IEnumVARIANT o))
34 {
36 }
37 intPtr = Marshal.GetIUnknownForObject(o);
38 return (System.Collections.IEnumerator)EnumeratorToEnumVariantMarshaler.GetInstance(null).MarshalNativeToManaged(intPtr);
39 }
40 finally
41 {
42 variant.Clear();
43 if (intPtr != IntPtr.Zero)
44 {
45 Marshal.Release(intPtr);
46 }
47 }
48 }
49
50 public object GetUnderlyingObject()
51 {
52 return _dispatch;
53 }
54}
static unsafe int Release(IntPtr pUnk)
Definition Marshal.cs:766
static IntPtr GetIUnknownForObject(object o)
Definition Marshal.cs:231
static string InvalidOp_InvalidNewEnumVariant
Definition SR.cs:2104
Definition SR.cs:7
void Invoke(int dispIdMember, ref Guid riid, int lcid, InvokeFlags wFlags, ref DISPPARAMS pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr)
static readonly Guid Empty
Definition Guid.cs:86
static readonly IntPtr Zero
Definition IntPtr.cs:18