Union部分只能放在最后,这和C的不太一样,要放在前面先用Type定义一个单独的Union类型就可以了。
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;type TMyUnion = packed record ID: Integer;// case Boolean of// true: (cmd: DWORD);// false: (hiCmd:Word;loCmd:Word);// case Byte of// 0: (cmd: DWORD);// 1: (hiCmd:Word;loCmd:Word);// case Integer of// 0: (cmd: DWORD);// 1: (hiCmd:Word;loCmd:Word); case aCmd:Integer of 0: (cmd: DWORD); 1: (hiCmd:Word;loCmd:Word); end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);var tmp: TMyUnion;begin tmp.ID := 10; tmp.cmd := $0000FFFF; tmp.aCmd := 100; ShowMessageFmt('%d',[SizeOf(TMyUnion)]); ShowMessageFmt('%d',[tmp.hiCmd]); ShowMessageFmt('%d',[tmp.aCmd]); Application.Terminate;end;end.