Changed: Only call CoUninitialize if CoInitialize(Ex) succeeded
This commit is contained in:
parent
cfaceffe9e
commit
97634f2157
2 changed files with 38 additions and 5 deletions
|
@ -76,12 +76,21 @@ namespace NLMISC {
|
|||
|
||||
nlWindow CSystemUtils::s_window = EmptyWindow;
|
||||
|
||||
#ifdef NL_OS_WINDOWS
|
||||
static bool s_mustUninit = false;
|
||||
#endif
|
||||
|
||||
bool CSystemUtils::init()
|
||||
{
|
||||
#ifdef NL_OS_WINDOWS
|
||||
// initialize COM
|
||||
if (!s_mustUninit)
|
||||
{
|
||||
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
|
||||
if (FAILED(hr)) return false;
|
||||
|
||||
s_mustUninit = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
return true;
|
||||
|
@ -91,7 +100,12 @@ bool CSystemUtils::uninit()
|
|||
{
|
||||
#ifdef NL_OS_WINDOWS
|
||||
// uninitialize COM
|
||||
if (s_mustUninit)
|
||||
{
|
||||
CoUninitialize();
|
||||
|
||||
s_mustUninit = false;
|
||||
}
|
||||
#endif
|
||||
|
||||
return true;
|
||||
|
|
|
@ -80,6 +80,26 @@ bool copyInstallerFiles(const QStringList &files, const QString &destination)
|
|||
return true;
|
||||
}
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
class CCOMHelper
|
||||
{
|
||||
bool m_mustUninit;
|
||||
|
||||
public:
|
||||
CCOMHelper()
|
||||
{
|
||||
// to fix the bug with QFileDialog::getExistingDirectory hanging under Windows
|
||||
m_mustUninit = SUCCEEDED(CoInitialize(NULL));
|
||||
}
|
||||
|
||||
~CCOMHelper()
|
||||
{
|
||||
// only call CoUninitialize if CoInitialize succeeded
|
||||
if (m_mustUninit) CoUninitialize();
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
#if defined(_MSC_VER) && defined(_DEBUG)
|
||||
|
@ -87,8 +107,7 @@ int main(int argc, char *argv[])
|
|||
#endif
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
// to fix the bug with QFileDialog::getExistingDirectory hanging under Windows
|
||||
CoInitialize(NULL);
|
||||
CCOMHelper comHelper;
|
||||
#endif
|
||||
|
||||
NLMISC::CApplicationContext appContext;
|
||||
|
|
Loading…
Reference in a new issue