我按如下方式定义了两个结构(一个在另一个结构中):
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]
public struct tagRCV_FILE_HEADEx
{
public int m_dwLen;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 260)]
public byte[] m_szFileName;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]
public struct tagRCV_DATA
{
public int m_nPacketNum;
[MarshalAs(UnmanagedType.Struct)]
public tagRCV_FILE_HEADEx m_File;
}
以下是我初始化的方式:
tagRCV_DATA rcv_data = new tagRCV_DATA ();
rcv_data.m_File = new tagRCV_FILE_HEADEx();
rcv_data.m_File.m_szFileName = new byte[260];
rcv_data.m_nPacketNum = 1;
以下是我如何进行编组并调用SendMessage:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SendMessage(IntPtr hwnd, uint Msg, int wParam, IntPtr lParam);
// let's say hwnd, Msg and RCV_REPORT are known parameters
IntPtr lParam = Marshal.AllocHGlobal(Marshal.SizeOf(rcv_data));
Marshal.StructureToPtr(rcv_data,lParam, false);
SendMessage(hwnd, Msg, RCV_REPORT, lParam);
Marshal.PtrToStructure(lParam, rcv_data);
Marshal.FreeHGlobal (lParam);
我跑的时候它崩溃了。谁能发现我在这里做错了什么?提前谢谢!