diff --git a/src/plugins/ispellchecker/ispellcheckerclient.cpp b/src/plugins/ispellchecker/ispellcheckerclient.cpp --- a/src/plugins/ispellchecker/ispellcheckerclient.cpp +++ b/src/plugins/ispellchecker/ispellcheckerclient.cpp @@ -19,7 +19,7 @@ m_wasCOMInitialized = SUCCEEDED(CoInitializeEx(nullptr, COINIT_MULTITHREADED)); // get factory - if (SUCCEEDED(CoCreateInstance(__uuidof(SpellCheckerFactory), nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&m_spellCheckerFactory)))) { + if (SUCCEEDED(CoCreateInstance(__uuidof(SpellCheckerFactory), nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&m_spellCheckerFactory))) && m_spellCheckerFactory) { // if we have a factory, cache the language names IEnumString* enumLanguages = nullptr; if (SUCCEEDED(m_spellCheckerFactory->get_SupportedLanguages(&enumLanguages))) { @@ -41,15 +41,15 @@ ISpellCheckerClient::~ISpellCheckerClient() { - // de-init com if needed - if (m_wasCOMInitialized) { - CoUninitialize(); - } - // release factory if (m_spellCheckerFactory) { m_spellCheckerFactory->Release(); } + + // de-init com if needed after we released the interface! + if (m_wasCOMInitialized) { + CoUninitialize(); + } } SpellerPlugin *ISpellCheckerClient::createSpeller(const QString &language) diff --git a/src/plugins/ispellchecker/ispellcheckerdict.cpp b/src/plugins/ispellchecker/ispellcheckerdict.cpp --- a/src/plugins/ispellchecker/ispellcheckerdict.cpp +++ b/src/plugins/ispellchecker/ispellcheckerdict.cpp @@ -13,7 +13,7 @@ : SpellerPlugin(language) { // try to init checker - if (!SUCCEEDED(spellCheckerFactory->CreateSpellChecker(language.toStdWString().c_str(), &m_spellChecker))) { + if (!spellCheckerFactory || !SUCCEEDED(spellCheckerFactory->CreateSpellChecker(language.toStdWString().c_str(), &m_spellChecker))) { m_spellChecker = nullptr; } }