我正在尝试定义TWaveFormatExtensible类型,但是不确定我是否正确地执行了Union类型声明。
type TWAVEFORMATEX = record
wFormatTag: word;
nChannels: LongWord;
nSamplesPerSec: word;
nAvgBytesPerSec: LongWord;
nBlockAlign: word;
wBitsPerSample: word;
cbSize: word;
end;
type TWaveFormatExtensible = record
Format: TWAVEFORMATEX;
dwChannelMask: LongWord;
SubFormat: integer;
case Word of
0: (wValidBitsPerSample: Word;);
1: (wSamplesPerBlock: Word;);
2: (wReserved: Word;);
end;
在C ++文档中:WAVEFORMATEXTENSIBLE使用联合样本类型。您将如何建议更正代码?如何将“样本”联合名称传递给声明?
结构的字段必须与原始(C ++)声明中的顺序相同。但是有一个问题:原始的声明将Samples
变体放在记录的中间,而Delphi不允许这样做。
您可以通过将变体部分声明为单独的记录,然后将该记录作为最终结构中的字段包括在内来解决此问题。
TWaveFormatExtensibleSamples = record
case Word of
0: (wValidBitsPerSample: Word;);
1: (wSamplesPerBlock: Word;);
2: (wReserved: Word;);
end;
然后构建最终结构:
TWaveFormatExtensible = record
Format: TWAVEFORMATEX;
Samples: TWaveFormatExtensibleSamples;
dwChannelMask: LongWord;
SubFormat: integer;
end;