UnmanagedMarshal.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. //
  2. // System.Reflection.Emit/UnmanagedMarshal.cs
  3. //
  4. // Author:
  5. // Paolo Molaro ([email protected])
  6. //
  7. // (C) 2001-2002 Ximian, Inc. http://www.ximian.com
  8. //
  9. using System.Reflection.Emit;
  10. using System.Runtime.InteropServices;
  11. using System;
  12. namespace System.Reflection.Emit {
  13. [Serializable]
  14. public sealed class UnmanagedMarshal {
  15. private int count;
  16. private UnmanagedType t;
  17. private UnmanagedType tbase;
  18. private UnmanagedMarshal (UnmanagedType maint, int cnt) {
  19. count = cnt;
  20. t = maint;
  21. tbase = maint;
  22. }
  23. private UnmanagedMarshal (UnmanagedType maint, UnmanagedType elemt) {
  24. count = 0;
  25. t = maint;
  26. tbase = elemt;
  27. }
  28. public UnmanagedType BaseType {
  29. get {
  30. if (t == UnmanagedType.LPArray || t == UnmanagedType.SafeArray)
  31. throw new ArgumentException ();
  32. return tbase;
  33. }
  34. }
  35. public int ElementCount {
  36. get {return count;}
  37. }
  38. public UnmanagedType GetUnmanagedType {
  39. get {return t;}
  40. }
  41. public Guid IIDGuid {
  42. get {return Guid.Empty;}
  43. }
  44. public static UnmanagedMarshal DefineByValArray( int elemCount) {
  45. return new UnmanagedMarshal (UnmanagedType.ByValArray, elemCount);
  46. }
  47. public static UnmanagedMarshal DefineByValTStr( int elemCount) {
  48. return new UnmanagedMarshal (UnmanagedType.ByValTStr, elemCount);
  49. }
  50. public static UnmanagedMarshal DefineLPArray( UnmanagedType elemType) {
  51. return new UnmanagedMarshal (UnmanagedType.LPArray, elemType);
  52. }
  53. public static UnmanagedMarshal DefineSafeArray( UnmanagedType elemType) {
  54. return new UnmanagedMarshal (UnmanagedType.SafeArray, elemType);
  55. }
  56. public static UnmanagedMarshal DefineUnmanagedMarshal( UnmanagedType unmanagedType) {
  57. return new UnmanagedMarshal (unmanagedType, unmanagedType);
  58. }
  59. }
  60. }