只是一般性问题,请从WindowsForms应用程序中获取以下代码:
using System.Runtime.InteropServices;
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x216) // WM_MOVING = 0x216
{
Rectangle rect = (Rectangle) Marshal.PtrToStructure(m.LParam, typeof (Rectangle));
DoSomethingWithRect(rect);
}
base.WndProc(ref m);
}
我是否应该在DoSomethingWithRect之后调用Marshal.DestroyStructure(m.LParam)以防止内存泄漏?我很乐意为什么或为什么不解释。
感谢。
答案 0 :(得分:1)
你不需要做任何比这里更多的事情。非托管内存由系统拥有。它分配了它,它将处理它。
您没有分配任何非托管内存。您只需将传递的非托管结构的内容复制到新的托管结构中。 .net GC将占用该托管对象的生命周期。