我对C++来说很新颖,阅读越多的问题越多。设计一个Win32api应用程序
我想将我的旧C代码(其中列出了机器上的设备)转换为设计良好的C++代码。
正如我所读,C++最基本的概念之一是容器,迭代器和算法的隔离。 这就是说,我进入了结论,我应该创建3类:
设备接口 - 保存单个接口信息,如SP_DEVICE_INTERFACE_DATA,PSP_DEVICE_INTERFACE_DETAIL_DATA和SP_DEVINFO_DATA
DevicesInterfaceContainer - 集装箱莫明以DeviceInterface类的形式保存所有设备信息。
DeviceInterfaceIterator - 由算法用于迭代DevicesInterfaceContainer中的项目。
我没有设法执行它,因为我不知道该怎么做。
迭代器应该是初始化DevicesInterfaceContainer的输出迭代器吗?或者DevicesInterfaceContainer是否应该自行初始化并获取所有设备?
Win32 API在构造函数中失败时会发生什么?我应该抛出异常吗?如果是的话,什么样的例外?的std ::例外?的std :: runtime_error?还是应该定义一个我自己的Win32Exception,它包含有关LastError的信息? (所有我需要的是,以格式化消息的最后一个错误。)
喜欢的东西:
class DeviceInterfacesList
{
public:
DeviceInterfacesList(GUID& rtInterfaceGuid)
{
m_hDevInfo = SetupDiGetClassDevs(
&rtInterfaceGuid,
NULL,
NULL,
DIGCF_DEVICEINTERFACE
);
if (INVALID_HANDLE_VALUE == m_hDevInfo)
{
throw Win32Exception();
}
}
...
...
...
HDEVINFO m_hDevInfo;
};
我会很高兴得到一些指导/好更新的例子使用STL + WIN32API或任何会澄清我的问题的东西。
在此先感谢。
在Windows环境中,您应该返回错误代码(HRESULT)而不是抛出C++异常(除非您在自己的代码中保留这些异常) –
@SimonMourier:当遵循RAII语言来包装系统资源和API调用时,请使用的C++异常是强制性的。这些例外也允许在您的代码之外旅行。如果没有人捕获到你的一个异常,调用* unexpected *处理程序(默认情况下终止程序)。 – IInspectable
@IInspectable - 当然,但是,这是有点我的观点,因为我特别谈论Windows编程,通常不会遵循这个习惯用法 –