varutilh.inc 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. Type
  2. // Types needed to make this work. These should be moved to the system unit.
  3. currency = int64;
  4. HRESULT = Longint;
  5. PSmallInt = ^Smallint;
  6. PLongint = ^Longint;
  7. PSingle = ^Single;
  8. PDouble = ^Double;
  9. PCurrency = ^Currency;
  10. TDateTime = Double;
  11. PDate = ^TDateTime;
  12. PPWideChar = ^PWideChar;
  13. Error = Longint;
  14. PError = ^Error;
  15. PWordBool = ^WordBool;
  16. PByte = ^Byte;
  17. EVarianterror = Class(Exception)
  18. ErrCode : longint;
  19. Constructor CreateCode(Code : Longint);
  20. end;
  21. TVarArrayBound = packed record
  22. ElementCount: Longint;
  23. LowBound: Longint;
  24. end;
  25. TVarArrayBoundArray = Array [0..0] of TVarArrayBound;
  26. PVarArrayBoundArray = ^TVarArrayBoundArray;
  27. TVarArrayCoorArray = Array [0..0] of Longint;
  28. PVarArrayCoorArray = ^TVarArrayCoorArray;
  29. PVarArray = ^TVarArray;
  30. TVarArray = packed record
  31. DimCount: Word;
  32. Flags: Word;
  33. ElementSize: Longint;
  34. LockCount: Integer;
  35. Data: Pointer;
  36. Bounds: TVarArrayBoundArray;
  37. end;
  38. TVarType = Word;
  39. PVarData = ^TVarData;
  40. TVarData = packed record
  41. VType: TVarType;
  42. case Integer of
  43. 0: (Reserved1: Word;
  44. case Integer of
  45. 0: (Reserved2, Reserved3: Word;
  46. case Integer of
  47. varSmallInt: (VSmallInt: SmallInt);
  48. varInteger: (VInteger: Longint);
  49. varSingle: (VSingle: Single);
  50. varDouble: (VDouble: Double);
  51. varCurrency: (VCurrency: Currency);
  52. varDate: (VDate: Double);
  53. varOleStr: (VOleStr: PWideChar);
  54. varDispatch: (VDispatch: Pointer);
  55. varError: (VError: LongWord);
  56. varBoolean: (VBoolean: WordBool);
  57. varUnknown: (VUnknown: Pointer);
  58. varByte: (VByte: Byte);
  59. varString: (VString: Pointer);
  60. varAny: (VAny: Pointer);
  61. varArray: (VArray: PVarArray);
  62. varByRef: (VPointer: Pointer);
  63. );
  64. 1: (VLongs: array[0..2] of LongInt);
  65. );
  66. 2: (VWords: array [0..6] of Word);
  67. 3: (VBytes: array [0..13] of Byte);
  68. end;
  69. Variant = TVarData;
  70. PVariant = ^Variant;
  71. { Variant functions }
  72. function VariantChangeTypeEx(var VargDest: TVarData; const VargSrc: TVarData; LCID: Integer; Flags: Word; VarType: Word): HRESULT; stdcall;
  73. function VariantClear(var Varg: TVarData): HRESULT; stdcall;
  74. function VariantCopy(var VargDest: TVarData; const VargSrc: TVarData): HRESULT; stdcall;
  75. function VariantCopyInd(var VargDest: TVarData; const VargSrc: TVarData): HRESULT; stdcall;
  76. function VariantInit(var Varg: TVarData): HRESULT; stdcall;
  77. { Variant array functions }
  78. function SafeArrayAccessData(psa: PVarArray; var ppvdata: Pointer): HRESULT; stdcall;
  79. function SafeArrayAllocData(psa: PVarArray): HRESULT; stdcall;
  80. function SafeArrayAllocDescriptor(DimCount: Integer; var psa: PVarArray): HRESULT; stdcall;
  81. function SafeArrayCopy(psa: PVarArray; var psaout: PVarArray): HRESULT; stdcall;
  82. function SafeArrayCopyData(psa, psaOut: PVarArray): HRESULT; stdcall;
  83. function SafeArrayCreate(VarType, Dim: Integer; const Bounds: TVarArrayBoundArray): PVarArray; stdcall;
  84. function SafeArrayDestroy(psa: PVarArray): HRESULT; stdcall;
  85. function SafeArrayDestroyData(psa: PVarArray): HRESULT; stdcall;
  86. function SafeArrayDestroyDescriptor(psa: PVarArray): HRESULT; stdcall;
  87. function SafeArrayGetDim(psa: PVarArray): Integer; stdcall;
  88. function SafeArrayGetElemSize(psa: PVarArray): LongWord; stdcall;
  89. function SafeArrayGetElement(psa: PVarArray; Indices: PVarArrayCoorArray; Data: Pointer): HRESULT; stdcall;
  90. function SafeArrayGetLBound(psa: PVarArray; Dim: Integer; var LBound: Integer): HRESULT; stdcall;
  91. function SafeArrayGetUBound(psa: PVarArray; Dim: Integer; var UBound: Integer): HRESULT; stdcall;
  92. function SafeArrayLock(psa: PVarArray): HRESULT; stdcall;
  93. function SafeArrayPtrOfIndex(psa: PVarArray; Indices: PVarArrayCoorArray; var Address: Pointer): HRESULT; stdcall;
  94. function SafeArrayPutElement(psa: PVarArray; Indices: PVarArrayCoorArray; const Data: Pointer): HRESULT; stdcall;
  95. function SafeArrayRedim(psa: PVarArray; const NewBound: TVarArrayBound): HRESULT; stdcall;
  96. function SafeArrayUnaccessData(psa: PVarArray): HRESULT; stdcall;
  97. function SafeArrayUnlock(psa: PVarArray): HRESULT; stdcall;
  98. { Conversion routines NOT in windows oleaut }
  99. Function VariantToSmallInt(Const VargSrc : TVarData) : SmallInt;
  100. Function VariantToLongint(Const VargSrc : TVarData) : Longint;
  101. Function VariantToSingle(Const VargSrc : TVarData) : Single;
  102. Function VariantToDouble(Const VargSrc : TVarData) : Double;
  103. Function VariantToCurrency(Const VargSrc : TVarData) : Currency;
  104. Function VariantToDate(Const VargSrc : TVarData) : TDateTime;
  105. Function VariantToBoolean(Const VargSrc : TVarData) : Boolean;
  106. Function VariantToByte(Const VargSrc : TVarData) : Byte;
  107. // Names match the ones in Borland varutils unit.
  108. const
  109. VAR_OK = HRESULT($00000000);
  110. VAR_TYPEMISMATCH = HRESULT($80020005);
  111. VAR_BADVARTYPE = HRESULT($80020008);
  112. VAR_EXCEPTION = HRESULT($80020009);
  113. VAR_OVERFLOW = HRESULT($8002000A);
  114. VAR_BADINDEX = HRESULT($8002000B);
  115. VAR_ARRAYISLOCKED = HRESULT($8002000D);
  116. VAR_NOTIMPL = HRESULT($80004001);
  117. VAR_OUTOFMEMORY = HRESULT($8007000E);
  118. VAR_INVALIDARG = HRESULT($80070057);
  119. VAR_UNEXPECTED = HRESULT($8000FFFF);
  120. ARR_NONE = $0000;
  121. ARR_FIXEDSIZE = $0010;
  122. ARR_OLESTR = $0100;
  123. ARR_UNKNOWN = $0200;
  124. ARR_DISPATCH = $0400;
  125. ARR_VARIANT = $0800;