X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=cbits%2FdirUtils.c;h=1e981d3c2f473d8aece89b86ba052bf43046dd07;hb=4a83f322cdf4374c7e4bce4c7f32ad07203d55b8;hp=86b36579176d2adcc2e9bdb912d970333ba821f0;hpb=dd70cacd4793c4497136829c50ef31f330163638;p=ghc-base.git diff --git a/cbits/dirUtils.c b/cbits/dirUtils.c index 86b3657..1e981d3 100644 --- a/cbits/dirUtils.c +++ b/cbits/dirUtils.c @@ -191,26 +191,28 @@ __hscore_getFolderPath(HWND hwndOwner, static int loaded_dll = 0; static HMODULE hMod = (HMODULE)NULL; static HSCORE_GETAPPFOLDERFUNTY funcPtr = NULL; + /* The DLLs to try loading entry point from */ + char* dlls[] = { "shell32.dll", "shfolder.dll" }; if (loaded_dll < 0) { return (-1); } else if (loaded_dll == 0) { - hMod = LoadLibrary("shell32.dll"); - if (hMod == NULL) { - loaded_dll = (-1); - return (-1); - } else { - funcPtr = (HSCORE_GETAPPFOLDERFUNTY)GetProcAddress(hMod, "SHGetFolderPathA"); - if (!funcPtr) { - loaded_dll = (-1); - return (-1); - } else { + int i; + for(i=0;i < sizeof(dlls); i++) { + hMod = LoadLibrary(dlls[i]); + if ( hMod != NULL && + (funcPtr = (HSCORE_GETAPPFOLDERFUNTY)GetProcAddress(hMod, "SHGetFolderPathA")) ) { loaded_dll = 1; + break; } } + if (loaded_dll == 0) { + loaded_dll = (-1); + return (-1); + } } /* OK, if we got this far the function has been bound */ return (int)funcPtr(hwndOwner,nFolder,hToken,dwFlags,pszPath); - /* ToDo: unload the DLL? */ + /* ToDo: unload the DLL on shutdown? */ } #endif