added more convenient wxDL_INIT_FUNC[_AW] macros and use them instead of verbose wxDynamicLibrary::GetSymbol() calls
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48891 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -106,6 +106,24 @@ enum wxPluginCategory
 | 
				
			|||||||
    type pfn ## name = (type)(dynlib).GetSymbol(_T(#name))
 | 
					    type pfn ## name = (type)(dynlib).GetSymbol(_T(#name))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// a more convenient function replacing wxDYNLIB_FUNCTION above
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// it uses the convention that the type of the function is its name suffixed
 | 
				
			||||||
 | 
					// with "_t" but it doesn't define a variable but just assigns the loaded value
 | 
				
			||||||
 | 
					// to it and also allows to pass it the prefix to be used instead of hardcoding
 | 
				
			||||||
 | 
					// "pfn" (the prefix can be "m_" or "gs_pfn" or whatever)
 | 
				
			||||||
 | 
					#define wxDL_INIT_FUNC(pfx, name, dynlib) \
 | 
				
			||||||
 | 
					    pfx ## name = (name ## _t)(dynlib).GetSymbol(#name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef __WXMSW__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// same as wxDL_INIT_FUNC() but appends 'A' or 'W' to the function name, see
 | 
				
			||||||
 | 
					// wxDynamicLibrary::GetSymbolAorW()
 | 
				
			||||||
 | 
					#define wxDL_INIT_FUNC_AW(pfx, name, dynlib) \
 | 
				
			||||||
 | 
					    pfx ## name = (name ## _t)(dynlib).GetSymbolAorW(#name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // __WXMSW__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// the following macros can be used to redirect a whole library to a class and
 | 
					// the following macros can be used to redirect a whole library to a class and
 | 
				
			||||||
// check at run-time if the library is present and contains all required
 | 
					// check at run-time if the library is present and contains all required
 | 
				
			||||||
// methods
 | 
					// methods
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -517,19 +517,9 @@ wxDisplayFactoryWin32Base::wxDisplayFactoryWin32Base()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        wxLogNull noLog;
 | 
					        wxLogNull noLog;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        gs_MonitorFromPoint = (MonitorFromPoint_t)
 | 
					        if ( (wxDL_INIT_FUNC(gs_, MonitorFromPoint, dllUser32)) == NULL ||
 | 
				
			||||||
            dllUser32.GetSymbol(wxT("MonitorFromPoint"));
 | 
					             (wxDL_INIT_FUNC(gs_, MonitorFromWindow, dllUser32)) == NULL ||
 | 
				
			||||||
        if ( !gs_MonitorFromPoint )
 | 
					             (wxDL_INIT_FUNC_AW(gs_, GetMonitorInfo, dllUser32)) == NULL )
 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        gs_MonitorFromWindow = (MonitorFromWindow_t)
 | 
					 | 
				
			||||||
            dllUser32.GetSymbol(wxT("MonitorFromWindow"));
 | 
					 | 
				
			||||||
        if ( !gs_MonitorFromWindow )
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        gs_GetMonitorInfo = (GetMonitorInfo_t)
 | 
					 | 
				
			||||||
            dllUser32.GetSymbolAorW(wxT("GetMonitorInfo"));
 | 
					 | 
				
			||||||
        if ( !gs_GetMonitorInfo )
 | 
					 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ms_supportsMultimon = 1;
 | 
					        ms_supportsMultimon = 1;
 | 
				
			||||||
@@ -601,9 +591,7 @@ wxDisplayFactoryMultimon::wxDisplayFactoryMultimon()
 | 
				
			|||||||
        wxLogNull noLog;
 | 
					        wxLogNull noLog;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        wxDynamicLibrary dllUser32(_T("user32.dll"));
 | 
					        wxDynamicLibrary dllUser32(_T("user32.dll"));
 | 
				
			||||||
        pfnEnumDisplayMonitors = (EnumDisplayMonitors_t)
 | 
					        if ( (wxDL_INIT_FUNC(pfn, EnumDisplayMonitors, dllUser32)) == NULL )
 | 
				
			||||||
            dllUser32.GetSymbol(wxT("EnumDisplayMonitors"));
 | 
					 | 
				
			||||||
        if ( !pfnEnumDisplayMonitors )
 | 
					 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -750,8 +738,7 @@ bool wxDisplayImplMultimon::ChangeMode(const wxVideoMode& mode)
 | 
				
			|||||||
        wxDynamicLibrary dllUser32(_T("user32.dll"));
 | 
					        wxDynamicLibrary dllUser32(_T("user32.dll"));
 | 
				
			||||||
        if ( dllUser32.IsLoaded() )
 | 
					        if ( dllUser32.IsLoaded() )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            pfnChangeDisplaySettingsEx = (ChangeDisplaySettingsEx_t)
 | 
					            wxDL_INIT_FUNC_AW(pfn, ChangeDisplaySettingsEx, dllUser32);
 | 
				
			||||||
                dllUser32.GetSymbolAorW(_T("ChangeDisplaySettingsEx"));
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        //else: huh, no user32.dll??
 | 
					        //else: huh, no user32.dll??
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -829,19 +816,17 @@ wxDisplayFactoryDirectDraw::wxDisplayFactoryDirectDraw()
 | 
				
			|||||||
    if ( !m_dllDDraw.IsLoaded() )
 | 
					    if ( !m_dllDDraw.IsLoaded() )
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DirectDrawEnumerateEx_t pDDEnumEx = (DirectDrawEnumerateEx_t)
 | 
					    DirectDrawEnumerateEx_t
 | 
				
			||||||
        m_dllDDraw.GetSymbolAorW(_T("DirectDrawEnumerateEx"));
 | 
					        wxDL_INIT_FUNC_AW(pfn, DirectDrawEnumerateEx, m_dllDDraw);
 | 
				
			||||||
    if ( !pDDEnumEx )
 | 
					    if ( !pfnDirectDrawEnumerateEx )
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // we can't continue without DirectDrawCreate() later, so resolve it right
 | 
					    // we can't continue without DirectDrawCreate() later, so resolve it right
 | 
				
			||||||
    // now and fail the initialization if it's not available
 | 
					    // now and fail the initialization if it's not available
 | 
				
			||||||
    m_pfnDirectDrawCreate = (DirectDrawCreate_t)
 | 
					    if ( !wxDL_INIT_FUNC(m_pfn, DirectDrawCreate, m_dllDDraw) )
 | 
				
			||||||
        m_dllDDraw.GetSymbol(_T("DirectDrawCreate"));
 | 
					 | 
				
			||||||
    if ( !m_pfnDirectDrawCreate )
 | 
					 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ( (*pDDEnumEx)(DDEnumExCallback,
 | 
					    if ( (*pfnDirectDrawEnumerateEx)(DDEnumExCallback,
 | 
				
			||||||
                                     this,
 | 
					                                     this,
 | 
				
			||||||
                                     DDENUM_ATTACHEDSECONDARYDEVICES) != DD_OK )
 | 
					                                     DDENUM_ATTACHEDSECONDARYDEVICES) != DD_OK )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,8 +61,7 @@ static BOOL wxShellNotifyIcon(DWORD dwMessage, NOTIFYICONDATA *pData)
 | 
				
			|||||||
        wxDynamicLibrary dllShell("shell32.dll");
 | 
					        wxDynamicLibrary dllShell("shell32.dll");
 | 
				
			||||||
        if ( dllShell.IsLoaded() )
 | 
					        if ( dllShell.IsLoaded() )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            s_pfnShell_NotifyIcon =
 | 
					            wxDL_INIT_FUNC_AW(s_pfn, Shell_NotifyIcon, dllShell);
 | 
				
			||||||
                (Shell_NotifyIcon_t)dllShell.GetSymbolAorW("Shell_NotifyIcon");
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // NB: it's ok to destroy dllShell here, we link to shell32.dll
 | 
					        // NB: it's ok to destroy dllShell here, we link to shell32.dll
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user