C# MIDIHDR问题
我试图在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#类库,任何帮助都将不胜感激 您可以更改: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
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;
}