如何在C#中为SendMessage编组结构

时间:2015-05-20 13:55:45

标签: c# struct marshalling sendmessage

我按如下方式定义了两个结构(一个在另一个结构中):

[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);

我跑的时候它崩溃了。谁能发现我在这里做错了什么?提前谢谢!

0 个答案:

没有答案