Приветствую уважаемых форумчан. Имеется у мелкомягких следующая структура:
| Код | typedef struct _EVT_VARIANT { union { BOOL BooleanVal; INT8 SByteVal; INT16 Int16Val; INT32 Int32Val; INT64 Int64Val; UINT8 ByteVal; UINT16 UInt16Val; UINT32 UInt32Val; UINT64 UInt64Val; float SingleVal; double DoubleVal; ULONGLONG FileTimeVal; SYSTEMTIME *SysTimeVal; GUID *GuidVal; LPCWSTR StringVal; LPCSTR AnsiStringVal; PBYTE BinaryVal; PSID SidVal; size_t SizeTVal; EVT_HANDLE EvtHandleVal; BOOL *BooleanArr; INT8 *SByteArr; INT16 *Int16Arr; INT32 *Int32Arr; INT64 *Int64Arr; UINT8 *ByteArr; UINT16 *UInt16Arr; UINT32 *UInt32Arr; UINT64 *UInt64Arr; float *SingleArr; double *DoubleArr; FILETIME *FileTimeArr; SYSTEMTIME *SysTimeArr; GUID *GuidArr; LPWSTR *StringArr; LPSTR *AnsiStringArr; PSID *SidArr; size_t *SizeTArr; LPCWSTR XmlVal; LPCWSTR* XmlValArr; }; DWORD Count; DWORD Type; } EVT_VARIANT, *PEVT_VARIANT;
|
Пробую перевести её на Delphi так:
| Код | TEvtVariant = record Union: record case dword of 0: (BooleanVal: boolean); 1: (SByteVal: Int8); 2: (Int16Val: int16); 3: (Int32Val: int32); 4: (Int64Val: int64); 5: (ByteVal: UInt8); 6: (UInt16Val: UInt16); 7: (UInt32Val: UInt32); 8: (UInt64Val: UInt64); 9: (SingleVal: single); 10: (DoubleVal: double); 11: (FileTimeVal: ULONGLONG); 12: (SysTimeVal: SYSTEMTIME); 13: (GuidVal: GUID); 14: (StringVal: PWideChar); 15: (AnsiStringVal: PChar); 16: (BinaryVal: PByte); 17: (SidVal: PSid); 18: (SizeTVal: size_t); 19: (EvtHandleVal: EVT_HANDLE); 20: (BooleanArr: PBoolean); 21: (SByteArr: PByte); 22: (Int16Arr: ^int16); 23: (Int32Arr: ^int32); 24: (Int64Arr: ^int64); 25: (ByteArr: PByte); 26: (UInt16Arr: ^UInt16); 27: (UInt32Arr: ^Uint32); 28: (UInt64Arr: ^Uint64); 29: (SingleArr: ^single); 30: (DoubleArr: ^double); 31: (FileTimeArr: ^FileTime); 32: (SysTimeArr: ^SystemTime); 33: (GuidArr: ^GUID); 34: (StringArr: ^PWideChar); 35: (AnsiStringArr: ^PChar); 36: (SidArr: ^PSid); 37: (SizeTArr: ^Size_T); 38: (XmlVal: PwideChar); 39: (XmlValArr: ^PWideChar); end; Count: Dword; vType: Dword; end;
|
И в результате - WinApi Функция её съедает, но на выходе - данные не валидны. В vType и Count рандомный мусор, при том что должно быть от 0 до 39. Следовательно я её перевёл не верно. Каким образом необходимо эту структуру перевести корректно? Я испробовал несколько вариантов - и не один не сработал-( |