1 Star 2 Fork 4

初雨团队 / CPPHelper

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
handle.h 1.71 KB
一键复制 编辑 原始数据 按行查看 历史
mingkuang 提交于 2017-03-12 14:30 . 修正御医错误
#pragma once
//#include <Wimgapi.h>
#define DefHandle(ClassName,type,hInvalidHandle,TCloseHandle)\
class ClassName\
{\
public:\
type hHandle;\
ClassName(type _hHandle = hInvalidHandle):hHandle(_hHandle){}\
~ClassName(){ Close(); }\
type* operator &(){ return &hHandle; } \
type operator=(type hHandle){ Close(); return this->hHandle = hHandle; }\
operator type() {return hHandle;}\
BOOL IsInvalid(){return hHandle == hInvalidHandle; }\
type Detach(){ type temp=hHandle; hHandle=hInvalidHandle;return temp; }\
HRESULT Close(){ if(IsInvalid()) return ERROR_INVALID_HANDLE; HRESULT hr=##TCloseHandle; if(hr==S_OK) hHandle=hInvalidHandle; return hr; }\
};
//关闭句柄形式1,直接返回 HRESULT
#define TCloseHandle1(_TCloseHandle) _TCloseHandle(hHandle)
//关闭句柄形式2,函数返回BOOL值,并通过GetLastError返回错误代码
#define TCloseHandle2(_TCloseHandle) _TCloseHandle(hHandle) ? S_OK : GetLastError()
//关闭句柄形式2,没有任何返回值
#define TCloseHandle3(_TCloseHandle) (_TCloseHandle(hHandle),S_OK)
//用于关闭RegOpenKey打开的句柄
DefHandle(CHKEY, HKEY, NULL, TCloseHandle1(RegCloseKey))
//用于关闭CreateFile打开的句柄
DefHandle(CHFile, HANDLE, INVALID_HANDLE_VALUE, TCloseHandle2(CloseHandle))
//用于关闭FindFirstFile打开的句柄
DefHandle(CHFileFind, HANDLE, INVALID_HANDLE_VALUE, TCloseHandle2(FindClose))
//自动关闭LoadLibrary的句柄
DefHandle(CHModule, HMODULE, NULL, TCloseHandle2(FreeLibrary))
//自动关闭互斥量的句柄
DefHandle(CHMutex, HANDLE, NULL, TCloseHandle2(CloseHandle))
typedef CHMutex CHEvent;
typedef CHMutex CHProcess;
#ifdef _WIMGAPI_H_
DefHandle(CHWim, HANDLE, NULL, TCloseHandle2(WIMCloseHandle))
#endif
#ifdef _INC_SETUPAPI
DefHandle(CHINF, HINF, INVALID_HANDLE_VALUE, TCloseHandle3(SetupCloseInfFile))
#endif
C++
1
https://gitee.com/Chuyu-Team/CPPHelper.git
git@gitee.com:Chuyu-Team/CPPHelper.git
Chuyu-Team
CPPHelper
CPPHelper
master

搜索帮助