none
WndProc Message.GetLParam()异常 RRS feed

  • 问题

  •  public struct MyMessage

            {

                [MarshalAs(UnmanagedType.LPStr)]

                public string Content;

            }

    Sender :

    [DllImport("user32.dll")]

     public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, ref MyMessage lParam);

     MyMessage msg =new MyMessage();

      msg.Content = "Sender" ;

      SendMessage(hwnd_win, 9999, new IntPtr(0),ref msg);

    Reciver:

     protected override void WndProc(ref Message m)

            {

     

                if (m.Msg == 9999)

                {

                    MyMessage msg = new MyMessage();

                    Type type = msg.GetType();

                    MyMessage str = (MyMessage)m.GetLParam(type);

                    return;

                }

                base.WndProc(ref m);

            }

    Sender和Reciver不是同一应用程序;

    我在 Message.GetLParam()出现异常(尝试读写受保护的内存) ;

    怎么才能读取这个 LParam这个参数

    谢谢

    2011年6月3日 3:05

答案

  • 你好,

    我测试了一下你的程序代码,这样传递消息获得消息是无法完成的,因为你的message是一个自定义的结构体,如若你分别在两个程序中声明这个这个结构体MyMessage,那么在receiver程序中获取的消息类型和接受到的结构类型是不一样的(虽然在两个程序中的声明是一样的)。建议你将这个自定义的结构体写入一个dll中,然后分别引用到两个程序中,或者取消自定义结构体,仅适用系统默认的message。

     


    Paul Zhou [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Paul Zhou 2011年6月10日 5:32
    2011年6月7日 9:42

全部回复

  • 你好,

    我测试了一下你的程序代码,这样传递消息获得消息是无法完成的,因为你的message是一个自定义的结构体,如若你分别在两个程序中声明这个这个结构体MyMessage,那么在receiver程序中获取的消息类型和接受到的结构类型是不一样的(虽然在两个程序中的声明是一样的)。建议你将这个自定义的结构体写入一个dll中,然后分别引用到两个程序中,或者取消自定义结构体,仅适用系统默认的message。

     


    Paul Zhou [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Paul Zhou 2011年6月10日 5:32
    2011年6月7日 9:42
  • 谢谢  非常感谢
    2011年6月9日 10:06