[System] Tweak socket test
[mono-project.git] / mono / tests / cominterop.cs
blobcc86c7387d0b7728ac01e1d8733786d3b6f4c907
1 //
2 // cominterop.cs:
3 //
4 // Tests for COM Interop related features
5 //
7 using System;
8 using System.Runtime.CompilerServices;
9 using System.Runtime.InteropServices;
12 public class Tests
15 [DllImport("libtest")]
16 public static extern int mono_test_marshal_bstr_in([MarshalAs(UnmanagedType.BStr)]string str);
18 [DllImport("libtest")]
19 public static extern int mono_test_marshal_bstr_out([MarshalAs(UnmanagedType.BStr)] out string str);
21 [DllImport("libtest")]
22 public static extern int mono_test_marshal_bstr_in_null([MarshalAs(UnmanagedType.BStr)]string str);
24 [DllImport("libtest")]
25 public static extern int mono_test_marshal_bstr_out_null([MarshalAs(UnmanagedType.BStr)] out string str);
27 [DllImport("libtest")]
28 public static extern int mono_test_marshal_variant_in_sbyte([MarshalAs(UnmanagedType.Struct)]object obj);
30 [DllImport("libtest")]
31 public static extern int mono_test_marshal_variant_in_byte([MarshalAs(UnmanagedType.Struct)]object obj);
33 [DllImport("libtest")]
34 public static extern int mono_test_marshal_variant_in_short([MarshalAs(UnmanagedType.Struct)]object obj);
36 [DllImport("libtest")]
37 public static extern int mono_test_marshal_variant_in_ushort([MarshalAs(UnmanagedType.Struct)]object obj);
39 [DllImport("libtest")]
40 public static extern int mono_test_marshal_variant_in_int([MarshalAs(UnmanagedType.Struct)]object obj);
42 [DllImport("libtest")]
43 public static extern int mono_test_marshal_variant_in_uint([MarshalAs(UnmanagedType.Struct)]object obj);
45 [DllImport("libtest")]
46 public static extern int mono_test_marshal_variant_in_long([MarshalAs(UnmanagedType.Struct)]object obj);
48 [DllImport("libtest")]
49 public static extern int mono_test_marshal_variant_in_ulong([MarshalAs(UnmanagedType.Struct)]object obj);
51 [DllImport("libtest")]
52 public static extern int mono_test_marshal_variant_in_float([MarshalAs(UnmanagedType.Struct)]object obj);
54 [DllImport("libtest")]
55 public static extern int mono_test_marshal_variant_in_double([MarshalAs(UnmanagedType.Struct)]object obj);
57 [DllImport("libtest")]
58 public static extern int mono_test_marshal_variant_in_bstr ([MarshalAs (UnmanagedType.Struct)]object obj);
60 [DllImport ("libtest")]
61 public static extern int mono_test_marshal_variant_in_bool_true ([MarshalAs (UnmanagedType.Struct)]object obj);
63 [DllImport ("libtest")]
64 public static extern int mono_test_marshal_variant_in_bool_false ([MarshalAs (UnmanagedType.Struct)]object obj);
66 [DllImport("libtest")]
67 public static extern int mono_test_marshal_variant_out_sbyte([MarshalAs(UnmanagedType.Struct)]out object obj);
69 [DllImport("libtest")]
70 public static extern int mono_test_marshal_variant_out_sbyte_byref([MarshalAs(UnmanagedType.Struct)]out object obj);
72 [DllImport("libtest")]
73 public static extern int mono_test_marshal_variant_out_byte([MarshalAs(UnmanagedType.Struct)]out object obj);
75 [DllImport("libtest")]
76 public static extern int mono_test_marshal_variant_out_byte_byref([MarshalAs(UnmanagedType.Struct)]out object obj);
78 [DllImport("libtest")]
79 public static extern int mono_test_marshal_variant_out_short([MarshalAs(UnmanagedType.Struct)]out object obj);
81 [DllImport("libtest")]
82 public static extern int mono_test_marshal_variant_out_short_byref([MarshalAs(UnmanagedType.Struct)]out object obj);
84 [DllImport("libtest")]
85 public static extern int mono_test_marshal_variant_out_ushort([MarshalAs(UnmanagedType.Struct)]out object obj);
87 [DllImport("libtest")]
88 public static extern int mono_test_marshal_variant_out_ushort_byref([MarshalAs(UnmanagedType.Struct)]out object obj);
90 [DllImport("libtest")]
91 public static extern int mono_test_marshal_variant_out_int([MarshalAs(UnmanagedType.Struct)]out object obj);
93 [DllImport("libtest")]
94 public static extern int mono_test_marshal_variant_out_int_byref([MarshalAs(UnmanagedType.Struct)]out object obj);
96 [DllImport("libtest")]
97 public static extern int mono_test_marshal_variant_out_uint([MarshalAs(UnmanagedType.Struct)]out object obj);
99 [DllImport("libtest")]
100 public static extern int mono_test_marshal_variant_out_uint_byref([MarshalAs(UnmanagedType.Struct)]out object obj);
102 [DllImport("libtest")]
103 public static extern int mono_test_marshal_variant_out_long([MarshalAs(UnmanagedType.Struct)]out object obj);
105 [DllImport("libtest")]
106 public static extern int mono_test_marshal_variant_out_long_byref([MarshalAs(UnmanagedType.Struct)]out object obj);
108 [DllImport("libtest")]
109 public static extern int mono_test_marshal_variant_out_ulong([MarshalAs(UnmanagedType.Struct)]out object obj);
111 [DllImport("libtest")]
112 public static extern int mono_test_marshal_variant_out_ulong_byref([MarshalAs(UnmanagedType.Struct)]out object obj);
114 [DllImport("libtest")]
115 public static extern int mono_test_marshal_variant_out_float([MarshalAs(UnmanagedType.Struct)]out object obj);
117 [DllImport("libtest")]
118 public static extern int mono_test_marshal_variant_out_float_byref([MarshalAs(UnmanagedType.Struct)]out object obj);
120 [DllImport("libtest")]
121 public static extern int mono_test_marshal_variant_out_double([MarshalAs(UnmanagedType.Struct)]out object obj);
123 [DllImport("libtest")]
124 public static extern int mono_test_marshal_variant_out_double_byref([MarshalAs(UnmanagedType.Struct)]out object obj);
126 [DllImport("libtest")]
127 public static extern int mono_test_marshal_variant_out_bstr ([MarshalAs (UnmanagedType.Struct)]out object obj);
129 [DllImport("libtest")]
130 public static extern int mono_test_marshal_variant_out_bstr_byref ([MarshalAs (UnmanagedType.Struct)]out object obj);
132 [DllImport("libtest")]
133 public static extern int mono_test_marshal_variant_out_bool_true ([MarshalAs (UnmanagedType.Struct)]out object obj);
135 [DllImport("libtest")]
136 public static extern int mono_test_marshal_variant_out_bool_true_byref ([MarshalAs (UnmanagedType.Struct)]out object obj);
138 [DllImport ("libtest")]
139 public static extern int mono_test_marshal_variant_out_bool_false ([MarshalAs (UnmanagedType.Struct)]out object obj);
141 [DllImport ("libtest")]
142 public static extern int mono_test_marshal_variant_out_bool_false_byref ([MarshalAs (UnmanagedType.Struct)]out object obj);
145 public delegate int VarFunc (VarEnum vt, [MarshalAs (UnmanagedType.Struct)] object obj);
147 public delegate int VarRefFunc (VarEnum vt, [MarshalAs (UnmanagedType.Struct)] ref object obj);
149 [DllImport ("libtest")]
150 public static extern int mono_test_marshal_variant_in_sbyte_unmanaged (VarFunc func);
152 [DllImport ("libtest")]
153 public static extern int mono_test_marshal_variant_in_byte_unmanaged (VarFunc func);
155 [DllImport ("libtest")]
156 public static extern int mono_test_marshal_variant_in_short_unmanaged (VarFunc func);
158 [DllImport ("libtest")]
159 public static extern int mono_test_marshal_variant_in_ushort_unmanaged (VarFunc func);
161 [DllImport ("libtest")]
162 public static extern int mono_test_marshal_variant_in_int_unmanaged (VarFunc func);
164 [DllImport ("libtest")]
165 public static extern int mono_test_marshal_variant_in_uint_unmanaged (VarFunc func);
167 [DllImport ("libtest")]
168 public static extern int mono_test_marshal_variant_in_long_unmanaged (VarFunc func);
170 [DllImport ("libtest")]
171 public static extern int mono_test_marshal_variant_in_ulong_unmanaged (VarFunc func);
173 [DllImport ("libtest")]
174 public static extern int mono_test_marshal_variant_in_float_unmanaged (VarFunc func);
176 [DllImport ("libtest")]
177 public static extern int mono_test_marshal_variant_in_double_unmanaged (VarFunc func);
179 [DllImport ("libtest")]
180 public static extern int mono_test_marshal_variant_in_bstr_unmanaged (VarFunc func);
182 [DllImport ("libtest")]
183 public static extern int mono_test_marshal_variant_in_bool_true_unmanaged (VarFunc func);
185 [DllImport ("libtest")]
186 public static extern int mono_test_marshal_variant_in_bool_false_unmanaged (VarFunc func);
188 [DllImport ("libtest")]
189 public static extern int mono_test_marshal_variant_out_sbyte_unmanaged (VarRefFunc func);
191 [DllImport ("libtest")]
192 public static extern int mono_test_marshal_variant_out_byte_unmanaged (VarRefFunc func);
194 [DllImport ("libtest")]
195 public static extern int mono_test_marshal_variant_out_short_unmanaged (VarRefFunc func);
197 [DllImport ("libtest")]
198 public static extern int mono_test_marshal_variant_out_ushort_unmanaged (VarRefFunc func);
200 [DllImport ("libtest")]
201 public static extern int mono_test_marshal_variant_out_int_unmanaged (VarRefFunc func);
203 [DllImport ("libtest")]
204 public static extern int mono_test_marshal_variant_out_uint_unmanaged (VarRefFunc func);
206 [DllImport ("libtest")]
207 public static extern int mono_test_marshal_variant_out_long_unmanaged (VarRefFunc func);
209 [DllImport ("libtest")]
210 public static extern int mono_test_marshal_variant_out_ulong_unmanaged (VarRefFunc func);
212 [DllImport ("libtest")]
213 public static extern int mono_test_marshal_variant_out_float_unmanaged (VarRefFunc func);
215 [DllImport ("libtest")]
216 public static extern int mono_test_marshal_variant_out_double_unmanaged (VarRefFunc func);
218 [DllImport ("libtest")]
219 public static extern int mono_test_marshal_variant_out_bstr_unmanaged (VarRefFunc func);
221 [DllImport ("libtest")]
222 public static extern int mono_test_marshal_variant_out_bool_true_unmanaged (VarRefFunc func);
224 [DllImport ("libtest")]
225 public static extern int mono_test_marshal_variant_out_bool_false_unmanaged (VarRefFunc func);
227 [DllImport ("libtest")]
228 public static extern int mono_test_marshal_com_object_create (out IntPtr pUnk);
230 [DllImport ("libtest")]
231 public static extern int mono_test_marshal_com_object_same (out IntPtr pUnk);
233 [DllImport ("libtest")]
234 public static extern int mono_test_marshal_com_object_destroy (IntPtr pUnk);
236 [DllImport ("libtest")]
237 public static extern int mono_test_marshal_com_object_ref_count (IntPtr pUnk);
239 [DllImport ("libtest")]
240 public static extern int mono_test_marshal_ccw_identity ([MarshalAs (UnmanagedType.Interface)]ITest itest);
242 [DllImport ("libtest")]
243 public static extern int mono_test_marshal_ccw_reflexive ([MarshalAs (UnmanagedType.Interface)]ITest itest);
245 [DllImport ("libtest")]
246 public static extern int mono_test_marshal_ccw_transitive ([MarshalAs (UnmanagedType.Interface)]ITest itest);
248 [DllImport ("libtest")]
249 public static extern int mono_test_marshal_ccw_itest ([MarshalAs (UnmanagedType.Interface)]ITest itest);
251 [DllImport ("libtest")]
252 public static extern int mono_test_marshal_ccw_itest ([MarshalAs (UnmanagedType.Interface)]ITestPresSig itest);
254 [DllImport("libtest")]
255 public static extern int mono_test_marshal_safearray_out_1dim_vt_bstr_empty ([MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)]out Array array);
257 [DllImport("libtest")]
258 public static extern int mono_test_marshal_safearray_out_1dim_vt_bstr ([MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)]out Array array);
260 [DllImport("libtest")]
261 public static extern int mono_test_marshal_safearray_out_2dim_vt_i4 ([MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)]out Array array);
263 [DllImport("libtest")]
264 public static extern int mono_test_marshal_safearray_out_4dim_vt_i4 ([MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)]out Array array);
266 [DllImport("libtest")]
267 public static extern int mono_test_marshal_safearray_in_byval_1dim_empty ([In, MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] Array array);
269 [DllImport("libtest")]
270 public static extern int mono_test_marshal_safearray_in_byval_1dim_vt_i4 ([In, MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] Array array);
272 [DllImport("libtest")]
273 public static extern int mono_test_marshal_safearray_in_byval_1dim_vt_mixed ([In, MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] Array array);
275 [DllImport("libtest")]
276 public static extern int mono_test_marshal_safearray_in_byval_2dim_vt_i4 ([In, MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] Array array);
278 [DllImport("libtest")]
279 public static extern int mono_test_marshal_safearray_in_byval_3dim_vt_bstr ([In, MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] Array array);
281 [DllImport("libtest")]
282 public static extern int mono_test_marshal_safearray_in_byref_3dim_vt_bstr ([In, MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] ref Array array);
284 [DllImport("libtest")]
285 public static extern int mono_test_marshal_safearray_in_out_byref_1dim_empty ([In, Out, MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] ref Array array);
287 [DllImport("libtest")]
288 public static extern int mono_test_marshal_safearray_in_out_byref_3dim_vt_bstr ([In, Out, MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] ref Array array);
290 [DllImport("libtest")]
291 public static extern int mono_test_marshal_safearray_in_out_byref_1dim_vt_i4 ([In, Out, MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] ref Array array);
293 [DllImport("libtest")]
294 public static extern int mono_test_marshal_safearray_in_out_byval_1dim_vt_i4 ([In, Out, MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] Array array);
296 [DllImport("libtest")]
297 public static extern int mono_test_marshal_safearray_in_out_byval_3dim_vt_bstr ([In, Out, MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] Array array);
299 [DllImport("libtest")]
300 public static extern int mono_test_marshal_safearray_mixed (
301 [In, Out, MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] Array array1,
302 [MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] out Array array2,
303 [In, MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] Array array3,
304 [In, Out, MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] ref Array array4);
306 [DllImport("libtest")]
307 public static extern bool mono_cominterop_is_supported ();
309 public static int Main ()
312 bool isWindows = !(((int)Environment.OSVersion.Platform == 4) ||
313 ((int)Environment.OSVersion.Platform == 128));
315 if (mono_cominterop_is_supported () || isWindows)
317 #region BSTR Tests
319 string str;
320 if (mono_test_marshal_bstr_in ("mono_test_marshal_bstr_in") != 0)
321 return 1;
322 if (mono_test_marshal_bstr_out (out str) != 0 || str != "mono_test_marshal_bstr_out")
323 return 2;
324 if (mono_test_marshal_bstr_in_null (null) != 0)
325 return 1;
326 if (mono_test_marshal_bstr_out_null (out str) != 0 || str != null)
327 return 2;
329 #endregion // BSTR Tests
331 #region VARIANT Tests
333 object obj;
334 if (mono_test_marshal_variant_in_sbyte ((sbyte)100) != 0)
335 return 13;
336 if (mono_test_marshal_variant_in_byte ((byte)100) != 0)
337 return 14;
338 if (mono_test_marshal_variant_in_short ((short)314) != 0)
339 return 15;
340 if (mono_test_marshal_variant_in_ushort ((ushort)314) != 0)
341 return 16;
342 if (mono_test_marshal_variant_in_int ((int)314) != 0)
343 return 17;
344 if (mono_test_marshal_variant_in_uint ((uint)314) != 0)
345 return 18;
346 if (mono_test_marshal_variant_in_long ((long)314) != 0)
347 return 19;
348 if (mono_test_marshal_variant_in_ulong ((ulong)314) != 0)
349 return 20;
350 if (mono_test_marshal_variant_in_float ((float)3.14) != 0)
351 return 21;
352 if (mono_test_marshal_variant_in_double ((double)3.14) != 0)
353 return 22;
354 if (mono_test_marshal_variant_in_bstr ("PI") != 0)
355 return 23;
356 if (mono_test_marshal_variant_out_sbyte (out obj) != 0 || (sbyte)obj != 100)
357 return 24;
358 if (mono_test_marshal_variant_out_byte (out obj) != 0 || (byte)obj != 100)
359 return 25;
360 if (mono_test_marshal_variant_out_short (out obj) != 0 || (short)obj != 314)
361 return 26;
362 if (mono_test_marshal_variant_out_ushort (out obj) != 0 || (ushort)obj != 314)
363 return 27;
364 if (mono_test_marshal_variant_out_int (out obj) != 0 || (int)obj != 314)
365 return 28;
366 if (mono_test_marshal_variant_out_uint (out obj) != 0 || (uint)obj != 314)
367 return 29;
368 if (mono_test_marshal_variant_out_long (out obj) != 0 || (long)obj != 314)
369 return 30;
370 if (mono_test_marshal_variant_out_ulong (out obj) != 0 || (ulong)obj != 314)
371 return 31;
372 if (mono_test_marshal_variant_out_float (out obj) != 0 || ((float)obj - 3.14) / 3.14 > .001)
373 return 32;
374 if (mono_test_marshal_variant_out_double (out obj) != 0 || ((double)obj - 3.14) / 3.14 > .001)
375 return 33;
376 if (mono_test_marshal_variant_out_bstr (out obj) != 0 || (string)obj != "PI")
377 return 34;
379 VarFunc func = new VarFunc (mono_test_marshal_variant_in_callback);
380 if (mono_test_marshal_variant_in_sbyte_unmanaged (func) != 0)
381 return 35;
382 if (mono_test_marshal_variant_in_byte_unmanaged (func) != 0)
383 return 36;
384 if (mono_test_marshal_variant_in_short_unmanaged (func) != 0)
385 return 37;
386 if (mono_test_marshal_variant_in_ushort_unmanaged (func) != 0)
387 return 38;
388 if (mono_test_marshal_variant_in_int_unmanaged (func) != 0)
389 return 39;
390 if (mono_test_marshal_variant_in_uint_unmanaged (func) != 0)
391 return 40;
392 if (mono_test_marshal_variant_in_long_unmanaged (func) != 0)
393 return 41;
394 if (mono_test_marshal_variant_in_ulong_unmanaged (func) != 0)
395 return 42;
396 if (mono_test_marshal_variant_in_float_unmanaged (func) != 0)
397 return 43;
398 if (mono_test_marshal_variant_in_double_unmanaged (func) != 0)
399 return 44;
400 if (mono_test_marshal_variant_in_bstr_unmanaged (func) != 0)
401 return 45;
402 if (mono_test_marshal_variant_in_bool_true_unmanaged (func) != 0)
403 return 46;
405 VarRefFunc reffunc = new VarRefFunc (mono_test_marshal_variant_out_callback);
406 if (mono_test_marshal_variant_out_sbyte_unmanaged (reffunc) != 0)
407 return 50;
408 if (mono_test_marshal_variant_out_byte_unmanaged (reffunc) != 0)
409 return 51;
410 if (mono_test_marshal_variant_out_short_unmanaged (reffunc) != 0)
411 return 52;
412 if (mono_test_marshal_variant_out_ushort_unmanaged (reffunc) != 0)
413 return 53;
414 if (mono_test_marshal_variant_out_int_unmanaged (reffunc) != 0)
415 return 54;
416 if (mono_test_marshal_variant_out_uint_unmanaged (reffunc) != 0)
417 return 55;
418 if (mono_test_marshal_variant_out_long_unmanaged (reffunc) != 0)
419 return 56;
420 if (mono_test_marshal_variant_out_ulong_unmanaged (reffunc) != 0)
421 return 57;
422 if (mono_test_marshal_variant_out_float_unmanaged (reffunc) != 0)
423 return 58;
424 if (mono_test_marshal_variant_out_double_unmanaged (reffunc) != 0)
425 return 59;
426 if (mono_test_marshal_variant_out_bstr_unmanaged (reffunc) != 0)
427 return 60;
428 if (mono_test_marshal_variant_out_bool_true_unmanaged (reffunc) != 0)
429 return 61;
431 if (mono_test_marshal_variant_out_sbyte_byref (out obj) != 0 || (sbyte)obj != 100)
432 return 97;
433 if (mono_test_marshal_variant_out_byte_byref (out obj) != 0 || (byte)obj != 100)
434 return 98;
435 if (mono_test_marshal_variant_out_short_byref (out obj) != 0 || (short)obj != 314)
436 return 99;
437 if (mono_test_marshal_variant_out_ushort_byref (out obj) != 0 || (ushort)obj != 314)
438 return 100;
439 if (mono_test_marshal_variant_out_int_byref (out obj) != 0 || (int)obj != 314)
440 return 101;
441 if (mono_test_marshal_variant_out_uint_byref (out obj) != 0 || (uint)obj != 314)
442 return 102;
443 if (mono_test_marshal_variant_out_long_byref (out obj) != 0 || (long)obj != 314)
444 return 103;
445 if (mono_test_marshal_variant_out_ulong_byref (out obj) != 0 || (ulong)obj != 314)
446 return 104;
447 if (mono_test_marshal_variant_out_float_byref (out obj) != 0 || ((float)obj - 3.14) / 3.14 > .001)
448 return 105;
449 if (mono_test_marshal_variant_out_double_byref (out obj) != 0 || ((double)obj - 3.14) / 3.14 > .001)
450 return 106;
451 if (mono_test_marshal_variant_out_bstr_byref (out obj) != 0 || (string)obj != "PI")
452 return 107;
454 #endregion // VARIANT Tests
456 #region Runtime Callable Wrapper Tests
458 #if !MOBILE
460 IntPtr pUnk;
461 if (mono_test_marshal_com_object_create (out pUnk) != 0)
462 return 145;
464 if (mono_test_marshal_com_object_ref_count (pUnk) != 1)
465 return 146;
467 if (Marshal.AddRef (pUnk) != 2)
468 return 147;
470 if (mono_test_marshal_com_object_ref_count (pUnk) != 2)
471 return 148;
473 if (Marshal.Release (pUnk) != 1)
474 return 149;
476 if (mono_test_marshal_com_object_ref_count (pUnk) != 1)
477 return 150;
479 object com_obj = Marshal.GetObjectForIUnknown (pUnk);
481 if (com_obj == null)
482 return 151;
484 ITest itest = com_obj as ITest;
486 if (itest == null)
487 return 152;
489 IntPtr pUnk2;
490 if (mono_test_marshal_com_object_same (out pUnk2) != 0)
491 return 153;
493 object com_obj2 = Marshal.GetObjectForIUnknown (pUnk2);
495 if (com_obj != com_obj2)
496 return 154;
498 if (!com_obj.Equals (com_obj2))
499 return 155;
501 IntPtr pUnk3;
502 if (mono_test_marshal_com_object_create (out pUnk3) != 0)
503 return 156;
505 object com_obj3 = Marshal.GetObjectForIUnknown (pUnk3);
506 if (com_obj == com_obj3)
507 return 157;
509 if (com_obj.Equals (com_obj3))
510 return 158;
512 // com_obj & com_obj2 share a RCW
513 if (Marshal.ReleaseComObject (com_obj2) != 1)
514 return 159;
516 // com_obj3 should only have one RCW
517 if (Marshal.ReleaseComObject (com_obj3) != 0)
518 return 160;
520 IntPtr iunknown = Marshal.GetIUnknownForObject (com_obj);
521 if (iunknown == IntPtr.Zero)
522 return 170;
524 if (pUnk != iunknown)
525 return 171;
527 if (TestITest (itest) != 0)
528 return 172;
530 if (TestITestPresSig (itest as ITestPresSig) != 0)
531 return 173;
533 if (TestITestDelegate (itest) != 0)
534 return 174;
536 itest = new TestClass ();
538 if (TestITest (itest) != 0)
539 return 175;
541 itest = (ITest)System.Activator.CreateInstance (typeof(TestActivatorClass));
543 if (TestITest (itest) != 0)
544 return 176;
546 #endif
548 #endregion // Runtime Callable Wrapper Tests
550 #region COM Callable Wrapper Tests
552 ManagedTest test = new ManagedTest ();
554 mono_test_marshal_ccw_itest (test);
556 if (test.Status != 0)
557 return 200;
559 ManagedTestPresSig test_pres_sig = new ManagedTestPresSig ();
561 mono_test_marshal_ccw_itest (test_pres_sig);
563 #endregion // COM Callable Wrapper Tests
565 #region SAFEARRAY tests
567 if (isWindows) {
569 /* out */
571 Array array;
572 if ((mono_test_marshal_safearray_out_1dim_vt_bstr_empty (out array) != 0) || (array.Rank != 1) || (array.Length != 0))
573 return 62;
575 if ((mono_test_marshal_safearray_out_1dim_vt_bstr (out array) != 0) || (array.Rank != 1) || (array.Length != 10))
576 return 63;
577 for (int i = 0; i < 10; ++i) {
578 if (i != Convert.ToInt32 (array.GetValue (i)))
579 return 64;
582 if ((mono_test_marshal_safearray_out_2dim_vt_i4 (out array) != 0) || (array.Rank != 2))
583 return 65;
584 if ( (array.GetLowerBound (0) != 0) || (array.GetUpperBound (0) != 3)
585 || (array.GetLowerBound (1) != 0) || (array.GetUpperBound (1) != 2))
586 return 66;
587 for (int i = array.GetLowerBound (0); i <= array.GetUpperBound (0); ++i)
589 for (int j = array.GetLowerBound (1); j <= array.GetUpperBound (1); ++j) {
590 if ((i + 1) * 10 + (j + 1) != (int)array.GetValue (new long[] { i, j }))
591 return 67;
595 if ((mono_test_marshal_safearray_out_4dim_vt_i4 (out array) != 0) || (array.Rank != 4))
596 return 68;
597 if ( (array.GetLowerBound (0) != 15) || (array.GetUpperBound (0) != 24)
598 || (array.GetLowerBound (1) != 20) || (array.GetUpperBound (1) != 22)
599 || (array.GetLowerBound (2) != 5) || (array.GetUpperBound (2) != 10)
600 || (array.GetLowerBound (3) != 12) || (array.GetUpperBound (3) != 18) )
601 return 69;
603 int index = 0;
604 for (int i = array.GetLowerBound (3); i <= array.GetUpperBound (3); ++i) {
605 for (int j = array.GetLowerBound (2); j <= array.GetUpperBound (2); ++j) {
606 for (int k = array.GetLowerBound (1); k <= array.GetUpperBound (1); ++k) {
607 for (int l = array.GetLowerBound (0); l <= array.GetUpperBound (0); ++l) {
608 if (index != (int)array.GetValue (new long[] { l, k, j, i }))
609 return 70;
610 ++index;
616 /* in */
618 array = new object[] { };
619 if (mono_test_marshal_safearray_in_byval_1dim_empty (array) != 0)
620 return 71;
622 array = new object[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
623 if (mono_test_marshal_safearray_in_byval_1dim_vt_i4 (array) != 0)
624 return 72;
626 array = new object[] { 0, "1", 2, "3", 4, "5", 6, "7", 8, "9", 10, "11", 12 };
627 if (mono_test_marshal_safearray_in_byval_1dim_vt_mixed (array) != 0)
628 return 73;
629 if ((int)array.GetValue (0) != 0)
630 return 74;
632 array = new object[,] { { 11, 12, 13, 14 }, { 21, 22, 23, 24 } };
633 if (mono_test_marshal_safearray_in_byval_2dim_vt_i4 (array) != 0)
634 return 75;
635 if ((int)array.GetValue (new int[] { 0, 0 }) != 11)
636 return 76;
638 array = new object[,,] { { { "111", "112", "113" }, { "121", "122", "123" } }, { { "211", "212", "213" }, { "221", "222", "223" } } };
639 if (mono_test_marshal_safearray_in_byval_3dim_vt_bstr (array) != 0)
640 return 77;
641 if ((string)array.GetValue (new int[] { 0, 0, 0 }) != "111")
642 return 78;
644 array = new object[,,] { { { "111", "112", "113" }, { "121", "122", "123" } }, { { "211", "212", "213" }, { "221", "222", "223" } } };
645 if ((mono_test_marshal_safearray_in_byref_3dim_vt_bstr (ref array) != 0) || (array.Rank != 3) || (array.Length != 12))
646 return 79;
647 if ((string)array.GetValue (new int[] { 0, 0, 0 }) != "111")
648 return 80;
650 /* in, out, byref */
652 array = new object[] { };
653 if ((mono_test_marshal_safearray_in_out_byref_1dim_empty (ref array) != 0) || (array.Rank != 1) || (array.Length != 8))
654 return 81;
655 for (int i = 0; i < 8; ++i)
657 if (i != Convert.ToInt32 (array.GetValue (i)))
658 return 82;
661 array = new object[,,] { { { "111", "112", "113" }, { "121", "122", "123" } }, { { "211", "212", "213" }, { "221", "222", "223" } } };
662 if ((mono_test_marshal_safearray_in_out_byref_3dim_vt_bstr (ref array) != 0) || (array.Rank != 1) || (array.Length != 8))
663 return 83;
664 for (int i = 0; i < 8; ++i)
666 if (i != Convert.ToInt32 (array.GetValue (i)))
667 return 84;
670 array = new object[] { 1 };
671 if ((mono_test_marshal_safearray_in_out_byref_1dim_vt_i4 (ref array) != 0) || (array.Rank != 1) || (array.Length != 1))
673 return 85;
675 if (Convert.ToInt32 (array.GetValue (0)) != -1)
676 return 86;
678 /* in, out, byval */
680 array = new object[] { 1 };
681 if ((mono_test_marshal_safearray_in_out_byval_1dim_vt_i4 (array) != 0) || (array.Rank != 1) || (array.Length != 1))
683 return 87;
685 if (Convert.ToInt32 (array.GetValue (0)) != 12345)
686 return 88;
688 array = new object[,,] { { { "111", "112", "113" }, { "121", "122", "123" } }, { { "211", "212", "213" }, { "221", "222", "223" } } };
689 if ((mono_test_marshal_safearray_in_out_byval_3dim_vt_bstr (array) != 0) || (array.Rank != 3) || (array.Length != 12))
691 return 89;
693 if (Convert.ToInt32 (array.GetValue (new int[] { 1, 1, 1 })) != 111)
694 return 90;
695 if (Convert.ToInt32 (array.GetValue (new int[] { 1, 1, 2 })) != 333)
696 return 91;
697 if (Convert.ToString(array.GetValue (new int[] { 0, 1, 0 })) != "ABCDEFG")
698 return 92;
700 /* Multiple safearray parameters with various types and options */
702 Array array1 = new object[] { 1 };
703 Array array2 = new object[,] { { 11, 12, 13, 14 }, { 21, 22, 23, 24 } };
704 Array array3 = new object[] { 0, "1", 2, "3", 4, "5", 6, "7", 8, "9", 10, "11", 12 };
705 Array array4 = new object[,,] { { { "111", "112", "113" }, { "121", "122", "123" } }, { { "211", "212", "213" }, { "221", "222", "223" } } };
706 if ( (mono_test_marshal_safearray_mixed (array1, out array2, array3, ref array4) != 0)
707 || (array1.Rank != 1) || (array1.Length != 1) || (Convert.ToInt32 (array1.GetValue (0)) != 12345)
708 || (array2.Rank != 1) || (array2.Length != 10)
709 || (array4.Rank != 1) || (array4.Length != 8)
712 return 93;
714 for (int i = 0; i < 10; ++i)
716 if (i != Convert.ToInt32 (array2.GetValue (i)))
717 return 94;
719 if ((int)array3.GetValue (0) != 0)
720 return 95;
721 for (int i = 0; i < 8; ++i)
723 if (i != Convert.ToInt32 (array4.GetValue (i)))
724 return 96;
727 #endregion // SafeArray Tests
729 #region COM Visible Test
730 TestVisible test_vis = new TestVisible();
731 IntPtr pDisp = Marshal.GetIDispatchForObject(test_vis);
732 if (pDisp == IntPtr.Zero)
733 return 200;
734 #endregion
737 return 0;
741 [ComImport ()]
742 [Guid ("00000000-0000-0000-0000-000000000001")]
743 [InterfaceType (ComInterfaceType.InterfaceIsIUnknown)]
744 public interface ITest
746 // properties need to go first since mcs puts them there
747 ITest Test
749 [return: MarshalAs (UnmanagedType.Interface)]
750 [MethodImpl (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId (5242884)]
751 get;
754 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
755 void SByteIn (sbyte val);
756 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
757 void ByteIn (byte val);
758 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
759 void ShortIn (short val);
760 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
761 void UShortIn (ushort val);
762 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
763 void IntIn (int val);
764 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
765 void UIntIn (uint val);
766 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
767 void LongIn (long val);
768 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
769 void ULongIn (ulong val);
770 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
771 void FloatIn (float val);
772 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
773 void DoubleIn (double val);
774 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
775 void ITestIn ([MarshalAs (UnmanagedType.Interface)]ITest val);
776 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
777 void ITestOut ([MarshalAs (UnmanagedType.Interface)]out ITest val);
780 [ComImport ()]
781 [Guid ("00000000-0000-0000-0000-000000000001")]
782 [InterfaceType (ComInterfaceType.InterfaceIsIUnknown)]
783 public interface ITestPresSig
785 // properties need to go first since mcs puts them there
786 ITestPresSig Test
788 [return: MarshalAs (UnmanagedType.Interface)]
789 [MethodImpl (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId (5242884)]
790 get;
793 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
794 [PreserveSig ()]
795 int SByteIn (sbyte val);
796 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
797 [PreserveSig ()]
798 int ByteIn (byte val);
799 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
800 [PreserveSig ()]
801 int ShortIn (short val);
802 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
803 [PreserveSig ()]
804 int UShortIn (ushort val);
805 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
806 [PreserveSig ()]
807 int IntIn (int val);
808 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
809 [PreserveSig ()]
810 int UIntIn (uint val);
811 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
812 [PreserveSig ()]
813 int LongIn (long val);
814 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
815 [PreserveSig ()]
816 int ULongIn (ulong val);
817 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
818 [PreserveSig ()]
819 int FloatIn (float val);
820 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
821 [PreserveSig ()]
822 int DoubleIn (double val);
823 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
824 [PreserveSig ()]
825 int ITestIn ([MarshalAs (UnmanagedType.Interface)]ITestPresSig val);
826 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
827 [PreserveSig ()]
828 int ITestOut ([MarshalAs (UnmanagedType.Interface)]out ITestPresSig val);
831 [System.Runtime.InteropServices.GuidAttribute ("00000000-0000-0000-0000-000000000002")]
832 [System.Runtime.InteropServices.ComImportAttribute ()]
833 [System.Runtime.InteropServices.ClassInterfaceAttribute (ClassInterfaceType.None)]
834 public class _TestClass : ITest
836 // properties need to go first since mcs puts them there
837 public virtual extern ITest Test
839 [return: MarshalAs (UnmanagedType.Interface)]
840 [MethodImpl (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId (5242884)]
841 get;
844 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
845 public virtual extern void SByteIn (sbyte val);
846 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
847 public virtual extern void ByteIn (byte val);
848 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
849 public virtual extern void ShortIn (short val);
850 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
851 public virtual extern void UShortIn (ushort val);
852 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
853 public virtual extern void IntIn (int val);
854 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
855 public virtual extern void UIntIn (uint val);
856 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
857 public virtual extern void LongIn (long val);
858 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
859 public virtual extern void ULongIn (ulong val);
860 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
861 public virtual extern void FloatIn (float val);
862 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
863 public virtual extern void DoubleIn (double val);
864 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
865 public virtual extern void ITestIn ([MarshalAs (UnmanagedType.Interface)]ITest val);
866 [MethodImplAttribute (MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
867 public virtual extern void ITestOut ([MarshalAs (UnmanagedType.Interface)]out ITest val);
870 [System.Runtime.InteropServices.GuidAttribute ("00000000-0000-0000-0000-000000000002")]
871 public class TestClass : _TestClass
873 static TestClass ()
875 ExtensibleClassFactory.RegisterObjectCreationCallback (new ObjectCreationDelegate (CreateObject)); ;
877 private static System.IntPtr CreateObject (System.IntPtr aggr)
879 IntPtr pUnk3;
880 mono_test_marshal_com_object_create (out pUnk3);
881 return pUnk3;
885 [System.Runtime.InteropServices.GuidAttribute ("00000000-0000-0000-0000-000000000003")]
886 public class TestActivatorClass : _TestClass
888 static TestActivatorClass ()
890 ExtensibleClassFactory.RegisterObjectCreationCallback (new ObjectCreationDelegate (CreateObject)); ;
892 private static System.IntPtr CreateObject (System.IntPtr aggr)
894 IntPtr pUnk3;
895 mono_test_marshal_com_object_create (out pUnk3);
896 return pUnk3;
900 delegate void SByteInDelegate (sbyte val);
901 delegate void ByteInDelegate (byte val);
902 delegate void ShortInDelegate (short val);
903 delegate void UShortInDelegate (ushort val);
904 delegate void IntInDelegate (int val);
905 delegate void UIntInDelegate (uint val);
906 delegate void LongInDelegate (long val);
907 delegate void ULongInDelegate (ulong val);
908 delegate void FloatInDelegate (float val);
909 delegate void DoubleInDelegate (double val);
910 delegate void ITestInDelegate (ITest val);
911 delegate void ITestOutDelegate (out ITest val);
913 public class ManagedTestPresSig : ITestPresSig
914 { // properties need to go first since mcs puts them there
915 public ITestPresSig Test
919 return new ManagedTestPresSig ();
923 public int SByteIn (sbyte val)
925 if (val != -100)
926 return 1;
927 return 0;
930 public int ByteIn (byte val)
932 if (val != 100)
933 return 2;
934 return 0;
937 public int ShortIn (short val)
939 if (val != -100)
940 return 3;
941 return 0;
944 public int UShortIn (ushort val)
946 if (val != 100)
947 return 4;
948 return 0;
951 public int IntIn (int val)
953 if (val != -100)
954 return 5;
955 return 0;
958 public int UIntIn (uint val)
960 if (val != 100)
961 return 6;
962 return 0;
965 public int LongIn (long val)
967 if (val != -100)
968 return 7;
969 return 0;
972 public int ULongIn (ulong val)
974 if (val != 100)
975 return 8;
976 return 0;
979 public int FloatIn (float val)
981 if (Math.Abs (val - 3.14f) > .000001)
982 return 9;
983 return 0;
986 public int DoubleIn (double val)
988 if (Math.Abs (val - 3.14f) > .000001)
989 return 10;
990 return 0;
993 public int ITestIn ([MarshalAs (UnmanagedType.Interface)]ITestPresSig val)
995 if (val == null)
996 return 11;
997 if (null == val as ManagedTestPresSig)
998 return 12;
999 return 0;
1002 public int ITestOut ([MarshalAs (UnmanagedType.Interface)]out ITestPresSig val)
1004 val = new ManagedTestPresSig ();
1005 return 0;
1009 public class ManagedTest : ITest
1011 private int status = 0;
1012 public int Status
1014 get { return status; }
1016 public void SByteIn (sbyte val)
1018 if (val != -100)
1019 status = 1;
1022 public void ByteIn (byte val)
1024 if (val != 100)
1025 status = 2;
1028 public void ShortIn (short val)
1030 if (val != -100)
1031 status = 3;
1034 public void UShortIn (ushort val)
1036 if (val != 100)
1037 status = 4;
1040 public void IntIn (int val)
1042 if (val != -100)
1043 status = 5;
1046 public void UIntIn (uint val)
1048 if (val != 100)
1049 status = 6;
1052 public void LongIn (long val)
1054 if (val != -100)
1055 status = 7;
1058 public void ULongIn (ulong val)
1060 if (val != 100)
1061 status = 8;
1064 public void FloatIn (float val)
1066 if (Math.Abs (val - 3.14f) > .000001)
1067 status = 9;
1070 public void DoubleIn (double val)
1072 if (Math.Abs (val - 3.14) > .000001)
1073 status = 10;
1076 public void ITestIn (ITest val)
1078 if (val == null)
1079 status = 11;
1080 if (null == val as ManagedTest)
1081 status = 12;
1084 public void ITestOut (out ITest val)
1086 val = new ManagedTest ();
1089 public ITest Test
1093 return new ManagedTest ();
1098 public static int mono_test_marshal_variant_in_callback (VarEnum vt, object obj)
1100 switch (vt)
1102 case VarEnum.VT_I1:
1103 if (obj.GetType () != typeof (sbyte))
1104 return 1;
1105 if ((sbyte)obj != -100)
1106 return 2;
1107 break;
1108 case VarEnum.VT_UI1:
1109 if (obj.GetType () != typeof (byte))
1110 return 1;
1111 if ((byte)obj != 100)
1112 return 2;
1113 break;
1114 case VarEnum.VT_I2:
1115 if (obj.GetType () != typeof (short))
1116 return 1;
1117 if ((short)obj != -100)
1118 return 2;
1119 break;
1120 case VarEnum.VT_UI2:
1121 if (obj.GetType () != typeof (ushort))
1122 return 1;
1123 if ((ushort)obj != 100)
1124 return 2;
1125 break;
1126 case VarEnum.VT_I4:
1127 if (obj.GetType () != typeof (int))
1128 return 1;
1129 if ((int)obj != -100)
1130 return 2;
1131 break;
1132 case VarEnum.VT_UI4:
1133 if (obj.GetType () != typeof (uint))
1134 return 1;
1135 if ((uint)obj != 100)
1136 return 2;
1137 break;
1138 case VarEnum.VT_I8:
1139 if (obj.GetType () != typeof (long))
1140 return 1;
1141 if ((long)obj != -100)
1142 return 2;
1143 break;
1144 case VarEnum.VT_UI8:
1145 if (obj.GetType () != typeof (ulong))
1146 return 1;
1147 if ((ulong)obj != 100)
1148 return 2;
1149 break;
1150 case VarEnum.VT_R4:
1151 if (obj.GetType () != typeof (float))
1152 return 1;
1153 if (Math.Abs ((float)obj - 3.14f) > 1e-10)
1154 return 2;
1155 break;
1156 case VarEnum.VT_R8:
1157 if (obj.GetType () != typeof (double))
1158 return 1;
1159 if (Math.Abs ((double)obj - 3.14) > 1e-10)
1160 return 2;
1161 break;
1162 case VarEnum.VT_BSTR:
1163 if (obj.GetType () != typeof (string))
1164 return 1;
1165 if ((string)obj != "PI")
1166 return 2;
1167 break;
1168 case VarEnum.VT_BOOL:
1169 if (obj.GetType () != typeof (bool))
1170 return 1;
1171 if ((bool)obj != true)
1172 return 2;
1173 break;
1175 return 0;
1178 public static int mono_test_marshal_variant_out_callback (VarEnum vt, ref object obj)
1180 switch (vt) {
1181 case VarEnum.VT_I1:
1182 obj = (sbyte)-100;
1183 break;
1184 case VarEnum.VT_UI1:
1185 obj = (byte)100;
1186 break;
1187 case VarEnum.VT_I2:
1188 obj = (short)-100;
1189 break;
1190 case VarEnum.VT_UI2:
1191 obj = (ushort)100;
1192 break;
1193 case VarEnum.VT_I4:
1194 obj = (int)-100;
1195 break;
1196 case VarEnum.VT_UI4:
1197 obj = (uint)100;
1198 break;
1199 case VarEnum.VT_I8:
1200 obj = (long)-100;
1201 break;
1202 case VarEnum.VT_UI8:
1203 obj = (ulong)100;
1204 break;
1205 case VarEnum.VT_R4:
1206 obj = (float)3.14f;
1207 break;
1208 case VarEnum.VT_R8:
1209 obj = (double)3.14;
1210 break;
1211 case VarEnum.VT_BSTR:
1212 obj = "PI";
1213 break;
1214 case VarEnum.VT_BOOL:
1215 obj = true;
1216 break;
1218 return 0;
1221 public static int TestITest (ITest itest)
1223 try {
1224 ITest itest2;
1225 itest.SByteIn (-100);
1226 itest.ByteIn (100);
1227 itest.ShortIn (-100);
1228 itest.UShortIn (100);
1229 itest.IntIn (-100);
1230 itest.UIntIn (100);
1231 itest.LongIn (-100);
1232 itest.ULongIn (100);
1233 itest.FloatIn (3.14f);
1234 itest.DoubleIn (3.14);
1235 itest.ITestIn (itest);
1236 itest.ITestOut (out itest2);
1238 catch (Exception ex) {
1239 return 1;
1241 return 0;
1244 public static int TestITestPresSig (ITestPresSig itest)
1246 ITestPresSig itest2;
1247 if (itest.SByteIn (-100) != 0)
1248 return 1000;
1249 if (itest.ByteIn (100) != 0)
1250 return 1001;
1251 if (itest.ShortIn (-100) != 0)
1252 return 1002;
1253 if (itest.UShortIn (100) != 0)
1254 return 1003;
1255 if (itest.IntIn (-100) != 0)
1256 return 1004;
1257 if (itest.UIntIn (100) != 0)
1258 return 1005;
1259 if (itest.LongIn (-100) != 0)
1260 return 1006;
1261 if (itest.ULongIn (100) != 0)
1262 return 1007;
1263 if (itest.FloatIn (3.14f) != 0)
1264 return 1008;
1265 if (itest.DoubleIn (3.14) != 0)
1266 return 1009;
1267 if (itest.ITestIn (itest) != 0)
1268 return 1010;
1269 if (itest.ITestOut (out itest2) != 0)
1270 return 1011;
1271 return 0;
1274 public static int TestITestDelegate (ITest itest)
1276 try {
1277 ITest itest2;
1279 SByteInDelegate SByteInFcn= itest.SByteIn;
1280 ByteInDelegate ByteInFcn = itest.ByteIn;
1281 UShortInDelegate UShortInFcn = itest.UShortIn;
1282 IntInDelegate IntInFcn = itest.IntIn;
1283 UIntInDelegate UIntInFcn = itest.UIntIn;
1284 LongInDelegate LongInFcn = itest.LongIn;
1286 ULongInDelegate ULongInFcn = itest.ULongIn;
1287 FloatInDelegate FloatInFcn = itest.FloatIn;
1288 DoubleInDelegate DoubleInFcn = itest.DoubleIn;
1289 ITestInDelegate ITestInFcn = itest.ITestIn;
1290 ITestOutDelegate ITestOutFcn = itest.ITestOut;
1292 SByteInFcn (-100);
1293 ByteInFcn (100);
1294 UShortInFcn (100);
1295 IntInFcn (-100);
1296 UIntInFcn (100);
1297 LongInFcn (-100);
1298 ULongInFcn (100);
1299 FloatInFcn (3.14f);
1300 DoubleInFcn (3.14);
1301 ITestInFcn (itest);
1302 ITestOutFcn (out itest2);
1304 catch (Exception) {
1305 return 1;
1307 return 0;
1311 public class TestVisible