我對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編程,通常不會遵循這個習慣用法 –