C# MIDIHDR问题

C# MIDIHDR问题,c#,struct,midi,class-library,winmm,C#,Struct,Midi,Class Library,Winmm,我试图在WinMM.dll中为MIDI函数编写一个包装器库,但在处理MIDI长消息时遇到了问题。我在PIvnoke.net中发现了这一点(我自己添加了第一行): 但我在编译时出错: 错误1“WinMMM.MidiWrapper.MIDIHDR”类型的结构成员“WinMMM.MidiWrapper.MIDIHDR.lpNext”导致结构布局C:\Users\Alex\Documents\Visual Studio 2010\Projects\WinMMM\WinMMM\MidiWrapper.cs

我试图在WinMM.dll中为MIDI函数编写一个包装器库,但在处理MIDI长消息时遇到了问题。我在PIvnoke.net中发现了这一点(我自己添加了第一行):

但我在编译时出错:

错误1“WinMMM.MidiWrapper.MIDIHDR”类型的结构成员“WinMMM.MidiWrapper.MIDIHDR.lpNext”导致结构布局C:\Users\Alex\Documents\Visual Studio 2010\Projects\WinMMM\WinMMM\MidiWrapper.cs 219 21 WinMMM中出现循环

我正在使用Visual Studio Ultimate 2010,我正在制作一个C#类库,任何帮助都将不胜感激

您可以更改:

MIDIHDR lpNext;
致:

来解决你眼前的问题


MIDL编译器无法取消对这些结构链的引用,但如果API调用将其中一个作为参数,则通过此更改,指向下一个结构的链接将被解码为原始指针,就像第一个字段
lpData

一样,您也可以将MIDIHDR的声明从结构更改为类类型。

我不确定您的正确声明的最后一位是否正确。dwReserved是四个DWORD_ptr的数组(请参阅)。您可以使用以下内容:

    // http://msdn.microsoft.com/en-us/library/dd798449%28VS.85%29.aspx
    [StructLayout(LayoutKind.Sequential)]
    public struct MIDIHDR
    {
        public string lpData;
        public int dwBufferLength;
        public int dwBytesRecorded;
        public IntPtr dwUser;
        public int dwFlags;
        public IntPtr lpNext;
        public IntPtr reserved;
        public int dwOffset;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public IntPtr[] dwReserved;
    }

@里奇:根据
MMSystem.h
这个字段是
/*为驾驶员保留的*/
,因此它没有任何用处,
IntPtr
是忽略它的最佳选择。
IntPtr lpNext;
    // http://msdn.microsoft.com/en-us/library/dd798449%28VS.85%29.aspx
    [StructLayout(LayoutKind.Sequential)]
    public struct MIDIHDR
    {
        public string lpData;
        public int dwBufferLength;
        public int dwBytesRecorded;
        public IntPtr dwUser;
        public int dwFlags;
        public IntPtr lpNext;
        public IntPtr reserved;
        public int dwOffset;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public IntPtr[] dwReserved;
    }