Move OLE initialization to a module

Previously this was done in wxMSW-specific wxApp version, which meant
that initialization was done after the modules initialization and,
especially problematically, uninitialization was done before modules
uninitialization, which resulted in problems when doing anything using
OLE from the modules OnExit().

This commit doesn't solve these problems yet, because it leaves modules
initialization order undefined, but the upcoming commits using it will.
This commit is contained in:
Vadim Zeitlin
2020-04-19 16:59:59 +02:00
parent 82b3efb88e
commit 071760b7f4

View File

@@ -145,6 +145,33 @@ wxVector<ClassRegInfo> gs_regClassesInfo;
LRESULT WXDLLEXPORT APIENTRY wxWndProc(HWND, UINT, WPARAM, LPARAM);
// ----------------------------------------------------------------------------
// Module for OLE initialization and cleanup
// ----------------------------------------------------------------------------
class wxOleInitModule : public wxModule
{
public:
wxOleInitModule()
{
}
virtual bool OnInit() wxOVERRIDE
{
return wxOleInitialize();
}
virtual void OnExit() wxOVERRIDE
{
wxOleUninitialize();
}
private:
wxDECLARE_DYNAMIC_CLASS(wxOleInitModule);
};
wxIMPLEMENT_DYNAMIC_CLASS(wxOleInitModule, wxModule);
// ===========================================================================
// wxGUIAppTraits implementation
// ===========================================================================
@@ -622,8 +649,6 @@ bool wxApp::Initialize(int& argc_, wxChar **argv_)
InitCommonControls();
wxOleInitialize();
wxSetKeyboardHook(true);
callBaseCleanup.Dismiss();
@@ -739,8 +764,6 @@ void wxApp::CleanUp()
wxSetKeyboardHook(false);
wxOleUninitialize();
// for an EXE the classes are unregistered when it terminates but DLL may
// be loaded several times (load/unload/load) into the same process in
// which case the registration will fail after the first time if we don't