处理对象

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 文件自动同步共享工具

    操作地址: http://blog.sina.com.cn/s/blog_1320088ed0102uxln. […]...

  2. 电脑办公 Windows 7 + Office 2013 入门与提高

    电脑办公 Windows 7 + Office 2013 入门与提高 Preface 1 电脑办公基础 1.1 […]...

  3. [windows][技巧]百度网盘提示您的电脑已安装百度网盘,是否覆盖,解决方法

    目录 故障描述 解决方法 故障描述 解决方法 win+r,输入regedit,进入注册表 依次打开HKEY_C […]...

  4. Windows 7 IE 11 使用异常解决办法总结

    决定从今天开始记录一些内容,方便自己以后查看,也算是对自己一个鞭策吧。 办公室电脑IE死活打不开,起因是以为装 […]...

  5. windows RDP远程代码执行_CVE-2019-0708漏洞复现

    windows RDP远程代码执行_CVE-2019-0708漏洞复现 一、漏洞概述 2019年5月14日微软 […]...

  6. 小众绿软|工具:Aero Glass Tweaker 1.3.1 for Windows 8

    一个开启Windows 8 Aero 玻璃效果的小工具。 重要提示:如果玻璃效果无效或者不正常,请手动选择[D […]...

  7. Windows 10版本区别

    在msdn资源站上看到两个下载不同的区别,二者都内置专业版,不同之处在于: consumer_editions […]...

  8. Windows 汇编语言编程教程[转]

    Windows 汇编语言编程教程[转]   目录 介 绍   ……………………………………………………………… […]...

随机推荐

  1. 四层负载均衡详解

    负载均衡集群为企业需求提供了可解决容量问题的有效方案,使负载可以在计算机集群中尽可能平均地分摊处理 四层负载均 […]...

  2. Tomcat – Tomcat 启动失败错误解决 Could not publish server configuration for Tomcat v9.0 Server at localhost.

    问题起因 Eclipse,Tomcat 项目存在已经关闭的 project,因此无法启动。 解决方法 进入 T […]...

  3. 简单的递归算法

            static void Main(string[] args)        {        […]...

  4. 跟着jmzeng学习GEO数据分析-GEO42872_1

      f=\'GSE42872_eSet.Rdata\' ##原文操作如此,是不是作者的习惯,先命名 # htt […]...

  5. 详解CSS position属性

    position是CSS中非常重要的一个属性,通过position属性,我们可以让元素相对于其正常位置,父元素 […]...

  6. ROC-RK3308-CC开发实例总结–PAJ7620手势传感器模块调试

    传感器介绍               PAJ7620传感器是原相科技(Pixart)的一款内部集成光学阵列式 […]...

  7. 阿里员工内部常用免费工具包 (转)

    ——价值数十万的免费工具包,速看!     —— 企业服务汇 :专注于优质企业服务和工作工具的研究与评测。工作 […]...

  8. 微服务架构下,如何高效运维?

    如今微服务架构已随处可见,却面临单服务流量激增时扩容,调用链条变长,调用关系更加复杂,微服务拆分导致故障点增多 […]...

展开目录

目录导航