Sto convertendo un'intestazione C per un'unità di delphi. Ho dei dubbi sull'UNION. Ad esempio, negli esempi seguenti, qual è la logica applicata in (CASE INTEGER OF)? È questo il modo corretto per convertire questa struttura?Converti struttura da C a Delphi
In C
typedef union _FLT_PARAMETERS {
struct {
PIO_SECURITY_CONTEXT SecurityContext;
ULONG Options;
USHORT POINTER_ALIGNMENT FileAttributes;
USHORT ShareAccess;
ULONG POINTER_ALIGNMENT EaLength;
PVOID EaBuffer;
LARGE_INTEGER AllocationSize;
} Create;
struct {
PIO_SECURITY_CONTEXT SecurityContext;
ULONG Options;
USHORT POINTER_ALIGNMENT Reserved;
USHORT ShareAccess;
PVOID Parameters; // PNAMED_PIPE_CREATE_PARAMETERS
} CreatePipe;
...
In Delphi
TCreate = record
SecurityContext: PIO_SECURITY_CONTEXT;
Options: ULONG;
FileAttributes: USHORT;
ShareAccess: USHORT;
EaLength: ULONG;
EaBuffer: PVOID;
AllocationSize: LARGE_INTEGER;
end;
TCreatePipe = Record
SecurityContext: PIO_SECURITY_CONTEXT;
Options: ULONG;
Reserved: USHORT;
ShareAccess: USHORT;
Parameters: PVOID;
end;
_FLT_PARAMETERS = Record
case integer of
0: (Create: TCreate);
1: (CreatePipe: TCreatePipe):
...
Ciò che non mi è chiaro è come il sistema sceglie l'opzione nel caso. A quanto ho capito, è come se avessi un tipo VARIANT che può essere TCreate o TCreatePipe. questo è corretto? – Flz
Capisci come funziona un sindacato? La parte variante di un record è identica. Ho incluso un link alla documentazione e un estratto. Sarebbe davvero di grande aiuto se mi mostrassi cosa significa "POINTER_ALIGNMENT" in modo da non dover indovinare. –