IntPtr的可用内存

时间:2017-03-21 05:10:07

标签: c# .net windows visual-studio

我正在将IntPtr传递给函数SendMessageTimeout,如下所示。  SendMessageTimeout是属于user32.dll的。

我不知道这个DLL如何将内存改为作为参考传递的IntPtr,即result

如何释放传递给此函数的IntPtr内存?

[DllImport("user32")]
public static extern int SendMessageTimeout(
    int hwnd, int msg, int wparam, int lparam, 
    int fuFlags, int uTimeout, IntPtr lpdwResult);       

if (handle > 0 && GetWindowText(handle, Buff, nChars) > 0)
{
    this.log("GetForegroundWindow : " +Buff.ToString());
    foreach (string str in this.titleList)
    {
        if (Buff.ToString().ToLower().Contains(str.ToLower()))
        {
            IntPtr result = IntPtr.Zero;
            if (SendMessageTimeout(handle, 0x0010, 0, 0, 0x0002, 2000, result) != 0) 
                DestroyWindow(handle);

            killed = true;
            break;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

完成后使用Marshal.FreeHGlobal

您可以使用FreeHGlobal从AllocHGlobal,ReAllocHGlobal或任何等效的非托管API方法分配的全局堆中释放任何内存。

 Marshal.FreeHGlobal(lpdwResult);