【发布时间】:2017-03-21 05:10:06
【问题描述】:
我将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;
}
}
}
【问题讨论】:
-
既然文档说明该参数是可选的,为什么不干脆省略它呢? (即通过
IntPtr.Zero)。 -
谢谢。是的,我认为通过 IntPtr.Zero 对我来说是有意义的。顺便说一句,如果我必须使用这个参数,有没有合适的方法来释放指针。我找不到任何有关 user32.dll 函数的适当文档
-
我,也不是。谷歌搜索后,我不知道我作为调用者是否负责释放内存,或者我是否可以依靠“系统”来处理释放这些内存。
-
有问题的指针用于存储消息处理的结果。这是否是指向需要释放的内存的指针,如果是,如何释放它,取决于消息。您需要查找要发送的特定消息的文档。
标签: c# .net windows visual-studio