{$mode delphi}
const
VT_EMPTY = 0;
VT_NULL = 1;
VT_I2 = 2;
VT_I4 = 3;
VT_R4 = 4;
VT_R8 = 5;
VT_CY = 6;
VT_DATE = 7;
VT_BSTR = 8;
VT_DISPATCH = 9;
VT_ERROR = 10;
VT_BOOL = 11;
VT_VARIANT = 12;
VT_UNKNOWN = 13;
VT_DECIMAL = 14;
VT_I1 = 16;
VT_UI1 = 17;
VT_UI2 = 18;
VT_UI4 = 19;
VT_I8 = 20;
VT_UI8 = 21;
VT_INT = 22;
VT_UINT = 23;
VT_VOID = 24;
VT_HRESULT = 25;
VT_FILETIME = 64;
type
PVarType = ^TVarType;
PCardArray = ^TCardArray;
TCardArray = array[0..MaxInt div SizeOf(Cardinal) - 1] of Cardinal;
WordBool = False..Boolean(65535);
MarshaledAString = ^AnsiChar;
PMarshaledAString = ^MarshaledAString;
LPSTR = MarshaledAString;
{$EXTERNALSYM LPSTR}
PLPSTR = ^LPSTR;
{$EXTERNALSYM PLPSTR}
LPCSTR = MarshaledAString;
{$EXTERNALSYM LPCSTR}
LPCTSTR = {$IFDEF UNICODE}MarshaledString{$ELSE}MarshaledAString{$ENDIF};
{$EXTERNALSYM LPCTSTR}
LPTSTR = {$IFDEF UNICODE}MarshaledString{$ELSE}MarshaledAString{$ENDIF};
{$EXTERNALSYM LPTSTR}
PLPCTSTR = {$IFDEF UNICODE}PMarshaledString{$ELSE}PMarshaledAString{$ENDIF};
{$EXTERNALSYM LPCTSTR}
PLPTSTR = {$IFDEF UNICODE}PMarshaledString{$ELSE}PMarshaledAString{$ENDIF};
{$EXTERNALSYM LPTSTR}
LPWSTR = PWideChar;
{$EXTERNALSYM LPWSTR}
PLPWSTR = ^LPWSTR;
LPCWSTR = PWideChar;
{$EXTERNALSYM LPCWSTR}
TOleChar = WideChar;
POleStr = PWideChar;
PPOleStr = ^POleStr;
PBStr = ^TBStr;
TBStr = POleStr;
ULONG = Cardinal;
PROPID = ULONG;
PPropID = ^TPropID;
TPropID = PROPID;
SHORT = Smallint;
{$EXTERNALSYM SHORT}
{$EXTERNALSYM TOleBool}
TOleBool = WordBool;
POleBool = ^TOleBool;
{$EXTERNALSYM SCODE}
LONG = Longint;
SCODE = LONG;
LONGLONG = Int64;
{$EXTERNALSYM LONGLONG}
PSID = Pointer;
{$EXTERNALSYM PSID}
PLargeInteger = ^TLargeInteger;
_LARGE_INTEGER = record
case Integer of
0: (
LowPart: DWORD;
HighPart: Longint);
1: (
QuadPart: LONGLONG);
end;
{$EXTERNALSYM _LARGE_INTEGER}
{$NODEFINE TLargeInteger}
TLargeInteger = Int64;
LARGE_INTEGER = _LARGE_INTEGER;
{$EXTERNALSYM LARGE_INTEGER}
DWORDLONG = UInt64;
{$EXTERNALSYM DWORDLONG}
ULONGLONG = UInt64;
{$EXTERNALSYM ULONGLONG}
PULONGLONG = ^UInt64;
{$EXTERNALSYM PULONGLONG}
PULargeInteger = ^TULargeInteger;
_ULARGE_INTEGER = record
case Integer of
0: (
LowPart: DWORD;
HighPart: DWORD);
1: (
QuadPart: ULONGLONG);
end;
{$EXTERNALSYM _ULARGE_INTEGER}
{$NODEFINE TULargeInteger}
TULargeInteger = UInt64;
ULARGE_INTEGER = _ULARGE_INTEGER;
{$EXTERNALSYM ULARGE_INTEGER}
{$EXTERNALSYM PSCODE}
PSCODE = ^Integer;
PPropVariant = ^TPropVariant;
{$EXTERNALSYM tagCAPROPVARIANT}
tagCAPROPVARIANT = record
cElems: ULONG;
pElems: PPropVariant;
end;
{$EXTERNALSYM CAPROPVARIANT}
CAPROPVARIANT = tagCAPROPVARIANT;
PCAPROPVARIANT = ^TCAPROPVARIANT;
TCAPROPVARIANT = tagCAPROPVARIANT;
PFileTime = ^TFileTime;
_FILETIME = record
dwLowDateTime: DWORD;
dwHighDateTime: DWORD;
end;
{$EXTERNALSYM _FILETIME}
TFileTime = _FILETIME;
tagPROPVARIANT = record
vt: TVarType;
wReserved1: Word;
wReserved2: Word;
wReserved3: Word;
case Integer of
VT_I1: (cVal: ShortInt);
VT_UI1: (bVal: Byte);
VT_I2: (iVal: SHORT);
VT_UI2: (uiVal: Word);
VT_BOOL: (boolVal: TOleBool);
VT_I4: (lVal: Longint);
VT_UI4: (ulVal: Cardinal);
VT_I8: (intVal: Integer);
VT_UI8: (uintVal: Uint64);
VT_ERROR: (scode: SCODE);
VT_I8: (hVal: LARGE_INTEGER);
VT_UI8: (uhVal: ULARGE_INTEGER);
VT_BSTR: (bstrVal: TBStr);
end;
{$EXTERNALSYM PROPVARIANT}
PROPVARIANT = tagPROPVARIANT;
tagVARIANT = VARIANT;
TPropVariant = tagPROPVARIANT;