首页 > 解决方案 > AUDIOFORMAT (WAVEFORMATEX) 结构的大小

问题描述

有结构:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct WAVEFORMATEX
{
    public ushort wFormatTag;
    public ushort nChannels;
    public uint nSamplesPerSec;
    public uint nAvgBytesPerSec;
    public ushort nBlockAlign;
    public ushort wBitsPerSample;
    public ushort cbSize;
};

Marshal.SizeOf(WAVEFORMATEX)说是 = 18

Win32SendMessage函数返回 size = 16 444

实际大小是 13,我可以假设它以 4 的大小对齐,所以 16 看起来是正确的。

为什么Marshal.SizeOf(WAVEFORMATEX)说18?

222

或者,如果 18 是正确的,那么为什么 SendMessage 返回 16?

标签: c#winapimarshalling

解决方案


正如评论指出的那样,大小值 18 是正确的,因为大小ushort是 2 而不是 1。

" Win32 SendMessage 函数返回 size = 16 "

SendMessage的返回值指定了消息处理的结果,取决于发送的消息,而不是它发送的大小。


推荐阅读