HANDLE: INVALID_HANDLE_VALUE vs NULL

原创 2012年03月28日 22:03:16
#include "stdafx.h"
#include <Windows.h>
#include <iostream>


using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
	HANDLE m_hCom = CreateFile(_T("COM3"),GENERIC_READ|GENERIC_WRITE,0,NULL
		,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0); //Open Port: COM1


	if(m_hCom == INVALID_HANDLE_VALUE)
		printf("%d\n",INVALID_HANDLE_VALUE);
	else
	{
		CloseHandle(m_hCom);
		m_hCom = INVALID_HANDLE_VALUE;
	}

	return 0;
}


1. HANDLE 类型为 void * 无类型指针

2. CreateFile如果成功,HANDLE 为合法句柄,并占有一个内核资源,进行if判断时和TRUE一样; 如果失败,则返回一个INVALID_HANDLE_VALUE ( vs2008下为0xfffffffff ) 实际值等于-1

3. CloseHandle执行后,可以释放句柄m_hCom的内核资源,比如串口操作时就是关闭串口的作用;且m_hCom的值仍然不变,为一个“合法”的地址形式,只是指向的资源已经被释放;此时应该立即赋值-1,如:m_hCom = INVALID_HANDLE_VALUE;


相关文章推荐

INVALID_HANDLE_VALUE 与 NULL

[cpp] view plaincopyprint? #include "stdafx.h"   #include    #include          u...

Windows内核对象无效返回值——NULL或者INVALID_HANDLE_VALUE??

今天看《Windows核心编程》无意间看到内核对象创建函数返回值的一段内容。以前写程序判断句柄无效的时候没有多想,经常用NULL,有时也用INVALID_HANDLE_VALUE。跟我同样犯迷糊的朋友...
  • anycell
  • anycell
  • 2012年03月11日 22:50
  • 5110

做一个检测钩子程序的工具

一、引言    Windows系统是建立在事件驱动的机制上的,每一个事件就是一个消息,每个运行中的程序,也就是所谓的进程,都维护者一个或多个消息队列,消息队列的个数取决于进程内包含的线程的个数。由于一...
  • immcss
  • immcss
  • 2009年12月21日 14:13
  • 794

详解Static_cast , Dynamic_cast及其背后的RTTI思想

问题: Static_cast 与 Dynamic_cast的区别 来自书本上的解释:   用 static_cast ( expression )   1. static_cast...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HANDLE: INVALID_HANDLE_VALUE vs NULL
举报原因:
原因补充:

(最多只允许输入30个字)