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

◆ Invoke()

unsafe void IDispatch. System.Runtime.InteropServices.ComEventsSink.Invoke ( int dispid,
ref Guid riid,
int lcid,
InvokeFlags wFlags,
ref DISPPARAMS pDispParams,
IntPtr pVarResult,
IntPtr pExcepInfo,
IntPtr puArgErr )
inlineprivate

Implements System.Runtime.InteropServices.IDispatch.

Definition at line 120 of file ComEventsSink.cs.

121 {
122 ComEventsMethod comEventsMethod = FindMethod(dispid);
123 if (comEventsMethod == null)
124 {
125 return;
126 }
127 object[] array = new object[pDispParams.cArgs];
128 int[] array2 = new int[pDispParams.cArgs];
129 bool[] array3 = new bool[pDispParams.cArgs];
130 int length = pDispParams.cNamedArgs + pDispParams.cArgs;
131 Span<Variant> span = new Span<Variant>(pDispParams.rgvarg.ToPointer(), length);
132 Span<int> span2 = new Span<int>(pDispParams.rgdispidNamedArgs.ToPointer(), length);
133 int num;
134 int i;
135 for (i = 0; i < pDispParams.cNamedArgs; i++)
136 {
137 num = span2[i];
138 ref Variant variant = ref GetVariant(ref span[i]);
139 array[num] = variant.ToObject();
140 array3[num] = true;
141 int num2 = -1;
142 if (variant.IsByRef)
143 {
144 num2 = i;
145 }
146 array2[num] = num2;
147 }
148 num = 0;
149 for (; i < pDispParams.cArgs; i++)
150 {
151 for (; array3[num]; num++)
152 {
153 }
154 ref Variant variant2 = ref GetVariant(ref span[pDispParams.cArgs - 1 - i]);
155 array[num] = variant2.ToObject();
156 int num3 = -1;
157 if (variant2.IsByRef)
158 {
159 num3 = pDispParams.cArgs - 1 - i;
160 }
161 array2[num] = num3;
162 num++;
163 }
164 object obj = comEventsMethod.Invoke(array);
165 if (pVarResult != IntPtr.Zero)
166 {
167 Marshal.GetNativeVariantForObject(obj, pVarResult);
168 }
169 for (i = 0; i < pDispParams.cArgs; i++)
170 {
171 int num4 = array2[i];
172 if (num4 != -1)
173 {
174 GetVariant(ref span[num4]).CopyFromIndirect(array[i]);
175 }
176 }
177 }
static unsafe ref Variant GetVariant(ref Variant pSrc)

References System.array, System.Runtime.InteropServices.ComEventsSink.FindMethod(), System.Runtime.InteropServices.Marshal.GetNativeVariantForObject(), System.Runtime.InteropServices.ComEventsSink.GetVariant(), System.Runtime.InteropServices.ComEventsMethod.Invoke(), System.length, System.obj, and System.IntPtr.Zero.