我应该在本地定义的IntPtr变量上使用CloseHandle吗?
本文关键字:CloseHandle 变量 IntPtr 定义 我应该 | 更新日期: 2023-09-27 18:18:53
如果我使用这个…
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
…要在我的c# .Net4.5 控制台应用程序中获得控制台的实例并将其分配给一个变量(我在调用user32的MessageBox()
方法时作为hWnd参数传递),我是否需要调用kernel32的CloseHandle()
方法当我完成了非托管变量?
当我尝试这个时,我得到一个SEHException,我的谷歌搜索似乎表明与调试模式和早期版本的。
问题1 -我应该使用CloseHandle,还是只是离开它,让控制台资源自己解决?
问题2 -是SEHException完全无关,还是因为我试图关闭控制台时,它仍然实例化?
边注
为"新手问题"道歉;我对非托管代码几乎没有经验。
我知道有更好的方法;我故意尝试在不导入Windows的情况下这样做。形式
永远不要在窗口句柄上调用CloseHandle。关闭窗口的正确方法是调用DestroyWindow。应该调用CloseHandle来关闭内核对象的句柄,例如文件句柄,进程句柄等。窗口句柄是一个GDI对象,所以它不会被CloseHandle关闭。
然而,DestroyWindow将关闭窗口,如果你点击关闭按钮。因此,要回答您的根本问题,不需要在代码中关闭窗口句柄。除非您想要关闭控制台窗口。