203 {
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 {
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:
280 break;
281 default:
283 }
284 }