Win句柄的API包装器类
Win API wrapper classes for handles
为只按值传递的句柄编写包装器类相对容易。我正在尝试确定最好的方法是封装需要通过地址传递的句柄。
例如,为SC_HANDLE之类的内容编写包装器,它按值传递给QueryServiceConfig()并不困难。可以实现像. gethandle ()这样的成员函数,或者实现operator()。问题(至少对我来说)是API函数,如RegOpenKeyEx(),需要一个HKEY的地址。
我读过重载操作符&通常是个坏主意。在允许API函数访问的同时保持封装(或尽可能多地保持封装),特别是资源收集,推荐的方法是什么?
你总是可以添加另一个间接层来避免operator&
和Attach
或Detach
的可怕超载,并从那里返回一个预包装的实例。
如果您可以在VS2010或gcc中使用c++ 0x,或者有其他方式访问std::unique_ptr<>
,那么您可以这样做(为简洁起见省略了错误检查):
struct hkey_deleter
{
void operator()(HKEY hkey)
{
::RegCloseKey(hkey);
}
};
typedef std::unique_ptr<HKEY__, hkey_deleter> regkey;
regkey MyRegOpenKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD ulOptions, REGSAM samDesired)
{
HKEY hOpenedKey = NULL;
::RegOpenKeyEx(hKey, lpSubKey, ulOptions, samDesired, &hOpenedKey);
return regkey(hOpenedKey);
}
void SomewhereElse()
{
...
regkey r = MyRegOpenKeyEx(HKEY_CLASSES_ROOT, nullptr, 0, KEY_READ);
...
}
hkey_deleter
将确保在退出作用域或调用regkey::reset()
时关闭注册表项。
相关文章:
- 使用 Python Extension API 包装复杂C++类
- C++ C-API 的包装器:探索传递"char*"的最佳选项
- 通过包装器从 C 访问C++ API 时,如何访问枚举类型
- 包装 C API 通过C++接受迭代器的函数获取原始指针
- Opencl C API包装器中的clfinish等效是什么
- 如何在不公开 C API 的情况下包装 C API
- 是否有适用于张量流对象检测 API 的C++包装器
- 尝试实现 Windows API 包装器的事件处理程序时遇到问题
- sqlite3 API的C 包装器 - sqlite3pp的替代方案
- 从 C++ => C 包装的 API(多线程)传输错误字符串
- 用相同的数据c++包装/铸造类和结构,以实现外部api
- 编写C API的线程安全C++包装器的努力
- 使用 SWIG 将 OpenCV 的 C++ API 包装在 GO 中
- d - 使用 SWIG 包装 Octave 的 C++ API
- 包装 API 时,我是否应该避免在实现类中进行向上转换
- 用于TFS API的C++包装器
- 使用SWIG和Python/C API包装返回std::map的函数
- 包装任何API函数
- 使用SWIG和Python/C API来包装一个函数,该函数采用C++类实例的Python列表
- 图形API上的包装器