Fixed dlmsw.cpp compilation with older SDKs and at run-time for systems prior to XP SP1.
Kernel32's SetDllDirectory is only available since XP SP1 and as such also not available in the SDK that comes by default with for example VS6. Attempt to retrieve the function from the DLL at run-time instead. Regression since r68935. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68962 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
2669319136
commit
685a9fa61d
@ -249,12 +249,37 @@ wxDynamicLibrary::RawLoad(const wxString& libname, int flags)
|
||||
MAX_PATH);
|
||||
|
||||
wxFileName::SplitPath(modpath, &path, NULL, NULL);
|
||||
::SetDllDirectory(path.t_str());
|
||||
|
||||
|
||||
typedef BOOL (WINAPI *SetDllDirectory_t)(LPCTSTR lpPathName);
|
||||
|
||||
static SetDllDirectory_t s_pfnSetDllDirectory = (SetDllDirectory_t) -1;
|
||||
|
||||
if ( s_pfnSetDllDirectory == (SetDllDirectory_t) -1 )
|
||||
{
|
||||
/*
|
||||
Should wxLoadedDLL ever not be used here (or rather, the
|
||||
wxDL_GET_LOADED flag isn't used), infinite recursion will take
|
||||
place (unless s_pfnSetDllDirectory is set to NULL here right
|
||||
before loading the DLL).
|
||||
*/
|
||||
wxLoadedDLL dllKernel("kernel32.dll");
|
||||
|
||||
wxDL_INIT_FUNC_AW(s_pfn, SetDllDirectory, dllKernel);
|
||||
}
|
||||
|
||||
if (s_pfnSetDllDirectory)
|
||||
{
|
||||
s_pfnSetDllDirectory(path.t_str());
|
||||
}
|
||||
|
||||
wxDllType handle = ::LoadLibrary(libname.t_str());
|
||||
|
||||
// reset the search path
|
||||
::SetDllDirectory(NULL);
|
||||
if (s_pfnSetDllDirectory)
|
||||
{
|
||||
s_pfnSetDllDirectory(NULL);
|
||||
}
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user