处理对象

sooksjb 2018-07-09 原文

处理对象

在Windows编程中,HANDLE根据不同的对象有不同的返回值,例如普通处理对象的无效值是NULL、

文件处理对象的无效值是INVALID_HANDLE_VALUE。

现对HANDLE进行封装,方便使用和扩展。

头文件

#pragma once

class CNullHandle
{
public:
CNullHandle(HANDLE h = NULL);
~CNullHandle();

void operator = (HANDLE h);
void Attach(HANDLE h);
void Close();
BOOL IsNull() const;
operator HANDLE () const;

public:
HANDLE m_handle;
};

class CInvalidHandle
{
public:
CInvalidHandle(HANDLE h = INVALID_HANDLE_VALUE);
~CInvalidHandle();

void operator = (HANDLE h);
void Attach(HANDLE h);
void Close();
BOOL IsNull() const;
operator HANDLE () const;

public:
HANDLE m_handle;
};

template<class T>
class CWinHandle
{
public:
CWinHandle(T h = NULL)
:m_h(h)
{
}
~CWinHandle()
{
}

void operator = (HANDLE h)
{
m_h = h;
}

void Attach(HANDLE h)
{
m_h.Attach(h);
}

void Close()
{
m_h.Close();
}

BOOL IsNull() const
{
return m_h.IsNull();
}

operator HANDLE () const
{
return m_h;
}

private:
T m_h;
};

实现文件

#include “stdafx.h”
#include “WinHandle.h”

CNullHandle::CNullHandle(HANDLE h/* = NULL*/)
:m_handle(h)
{
}

CNullHandle::~CNullHandle()
{
Close();
}

void CNullHandle::operator = (HANDLE h)
{
Attach(h);
}

void CNullHandle::Attach(HANDLE h)
{
if (NULL != m_handle && m_handle != h)
{
CloseHandle(m_handle);
m_handle = h;
}
}

void CNullHandle::Close()
{
if (NULL != m_handle)
{
CloseHandle(m_handle);
m_handle = NULL;
}
}

BOOL CNullHandle::IsNull() const
{
return (NULL == m_handle);
}

CNullHandle::operator HANDLE () const
{
return m_handle;
}

CInvalidHandle::CInvalidHandle(HANDLE h/* = INVALID_HANDLE_VALUE*/)
:m_handle(h)
{
}

CInvalidHandle::~CInvalidHandle()
{
Close();
}

void CInvalidHandle::operator = (HANDLE h)
{
Attach(h);
}

void CInvalidHandle::Attach(HANDLE h)
{
if (INVALID_HANDLE_VALUE != m_handle && m_handle != h)
{
CloseHandle(m_handle);
m_handle = h;
}
}

void CInvalidHandle::Close()
{
if (INVALID_HANDLE_VALUE != m_handle)
{
CloseHandle(m_handle);
m_handle = INVALID_HANDLE_VALUE;
}
}

BOOL CInvalidHandle::IsNull() const
{
return (INVALID_HANDLE_VALUE == m_handle);
}

CInvalidHandle::operator HANDLE () const
{
return m_handle;
}

发表于 2018-07-09 18:30 sooksjb 阅读() 评论() 编辑 收藏

 

版权声明:本文为sooksjb原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/sooksjb/p/9285270.html

处理对象的更多相关文章

  1. 修改 Windows Host 文件工具

    Hosts文件是一个用于储存计算机网络中各节点信息的计算机文件。这个文件负责将主机名映射到相应的IP地址。ho […]...

  2. Windows 中Hosts文件的作用

    我们在平常的应用中,难免会碰到一些关于Hosts文件的用法,下面分析下,若有不妥之处,还望指正.        […]...

  3. phpstudy2016 redis扩展 windows

    第一步,查看环境的信息。 第二步,根据线程是否安全、架构32位或64位下载redis扩展。  http://p […]...

  4. Windows 8.1 Hyper-V安装的虚拟机 – xchit

    Windows 8.1 Hyper-V安装的虚拟机 2014-01-15 12:09  xchit  阅读(1 […]...

  5. Windows Mobile5.0模拟器用ActiveSync来使用PC机的网络

            1、先在VS2005的工具菜单中“设备仿真器管理”,选中你的模拟器设备,右键选择“连接”,在模 […]...

  6. 幻灯片放映模式切换windows terminal背景图片

    目录 幻灯片放映模式切换windows terminal背景图片 脚本功能 开发需求 使用技术 操作说明 使用 […]...

  7. Windows server 2016 安装Geforce 显卡驱动 – 立平

    Windows server 2016 安装Geforce 显卡驱动 Windows server 2016 […]...

  8. windows 7(32/64位)GHO安装指南(序篇)~

    大家好,本人是高三刚毕业,即将踏入校园的程序猿~我写这篇文章呢,主要是想巩固一下之前对于电脑的基础知识理论,也 […]...

随机推荐

  1. 报告老板,微服务高可用神器已祭出,您花巨资营销的高流量来了没?

    从阿里双11的高并发高流量开始来聊一聊高流量的解决方案,比如流量控制、流量整形、熔断降级、冷启动等等。 我得意 […]...

  2. html标签嵌套

    发现问题:p标签中嵌套p标签导致页面解析出来的结构错误。然后外层p标签换div就不会出现问题。 HTML4/X […]...

  3. .net npoi读word内容+目录

      最近在做读npoi文档存入搜索引擎,实现快速查询word文档中内容并展示,效果希望带有目录导航。   网上 […]...

  4. WEB——项目开发流程(含需求分析)

    web开发流程图解   一、需求分析阶段  产品经理PM召集项目相关人员,开需求讨论会、讲解原型 相关人员需理 […]...

  5. 物联网常见定位技术的优缺点

    万物互联的时代也是数据为王的时代,然而在很多时候,没有对应的位置信息就意味着数据是“杂乱无章”的,可利用的价值 […]...

  6. 学习笔记7-监测程序

    本文学习了top/ps/kill命令  前言   当程序在系统上运行时,我们称之为进程(process)。想监 […]...

  7. mac 关闭&&显示隐藏文件命令

    打开终端,输入:  defaults write com.apple.finder AppleShowAllF […]...

  8. python 图片爬虫抓取图片系列一——爬取指定网页中的图片

      来自 《Python项目案例开发从入门到实战》(清华大学出版社 郑秋生 夏敏捷主编)中爬虫应用——抓取百度 […]...

展开目录

目录导航