【发布时间】:2019-11-09 18:55:25
【问题描述】:
我正在尝试定义 TWaveFormatExtensible 类型,但我不确定我是否正确声明了 Samples 联合。这是头文件(Windows SDK 10.0.17763.0)的原始声明:
typedef struct {
WAVEFORMATEX Format;
union {
WORD wValidBitsPerSample; /* bits of precision */
WORD wSamplesPerBlock; /* valid if wBitsPerSample==0 */
WORD wReserved; /* If neither applies, set to zero. */
} Samples;
DWORD dwChannelMask; /* which channels are */
/* present in stream */
GUID SubFormat;
}
这是我尝试过的:
type
TWAVEFORMATEX = record
wFormatTag: Word;
nChannels: LongWord;
nSamplesPerSec: Word;
nAvgBytesPerSec: LongWord;
nBlockAlign: Word;
wBitsPerSample: Word;
cbSize: Word;
end;
TWaveFormatExtensible = record
Format: TWAVEFORMATEX;
dwChannelMask: LongWord;
SubFormat: Integer;
case Word of
0: (wValidBitsPerSample: Word;);
1: (wSamplesPerBlock: Word;);
2: (wReserved: Word;);
end;
但这是不正确的。如何在 Delphi 的记录结构中声明联合?
【问题讨论】:
-
IIRC,Delphi 7 早于
WAVEFORMATEXTENSIBLE的发明。是什么阻止您在自己的代码中简单地声明它? -
@RemyLebeau:如何声明联合样本?
-
P.S.
SubFormat的类型为GUID(在 Delphi 中为TGUID),而不是Integer。成员nChannels的类型为WORD,nSamplesPerSec的类型为DWORD。除了您应该最好使用本机类型,例如DWORD成员声明为DWORD类型。