COM: Make com_initializer constructors throw on error

This aligns the class with other COM classes (see com_obj) and makes
client code simpler as it does not need to check for error explicitly.

Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
Simon Rozman 2023-12-08 10:09:47 +01:00
parent 06b656e2ce
commit f778e698c9

View File

@ -1144,9 +1144,11 @@ namespace winstd
/// ///
/// \sa [CoInitialize function](https://msdn.microsoft.com/en-us/library/windows/desktop/ms678543.aspx) /// \sa [CoInitialize function](https://msdn.microsoft.com/en-us/library/windows/desktop/ms678543.aspx)
/// ///
com_initializer(_In_opt_ LPVOID pvReserved) noexcept com_initializer(_In_opt_ LPVOID pvReserved)
{ {
m_result = CoInitialize(pvReserved); HRESULT hr = CoInitialize(pvReserved);
if (FAILED(hr))
throw com_runtime_error(hr, "CoInitialize failed");
} }
/// ///
@ -1154,9 +1156,11 @@ namespace winstd
/// ///
/// \sa [CoInitializeEx function](https://msdn.microsoft.com/en-us/library/windows/desktop/ms695279.aspx) /// \sa [CoInitializeEx function](https://msdn.microsoft.com/en-us/library/windows/desktop/ms695279.aspx)
/// ///
com_initializer(_In_opt_ LPVOID pvReserved, _In_ DWORD dwCoInit) noexcept com_initializer(_In_opt_ LPVOID pvReserved, _In_ DWORD dwCoInit)
{ {
m_result = CoInitializeEx(pvReserved, dwCoInit); HRESULT hr = CoInitializeEx(pvReserved, dwCoInit);
if (FAILED(hr))
throw com_runtime_error(hr, "CoInitializeEx failed");
} }
/// ///
@ -1166,22 +1170,8 @@ namespace winstd
/// ///
virtual ~com_initializer() virtual ~com_initializer()
{ {
if (SUCCEEDED(m_result))
CoUninitialize(); CoUninitialize();
} }
///
/// Return result of `CoInitialize()` call.
///
/// \sa [CoInitialize function](https://msdn.microsoft.com/en-us/library/windows/desktop/ms678543.aspx)
///
HRESULT status() const noexcept
{
return m_result;
}
protected:
HRESULT m_result; ///< Result of CoInitialize call
}; };
/// @} /// @}