On Mon, 30 Aug 2004, Juan Lang wrote:
From MSDN on SHGetFolderPath:
This function is a superset of SHGetSpecialFolderPath, included with earlier versions of the Shell. On systems preceeding those including Shell32.dll version 5.0 (Windows Millennium Edition (Windows Me) and Windows 2000), SHGetFolderPath was obtained through SHFolder.dll, distributed with Microsoft Internet Explorer 4.0 and later versions. SHFolder.dll always calls the current platform's version of this function. If that fails, it will try to simulate the appropriate behavior.
So, I think your patch is a good first step, to use GetProcAddress rather than letting the linker do it.
Maybe, but it became of no use.
A next step would be, I think, to do what I suggested: if this fails, try to GetProcAddress for SHGetSpecialFolderPath, since this was available on older versions of shell32. You might have to search by ordinal if searching by name fails.
I don't know ordinal value of this function. The only way to get it for me would be to debug shfolder.dll DllMain() from/on some old windows boxes. OTOH, Juergen writes [1]:
* > Which means Win98's shell32 does not have an SHGetFolderPath at * > all. * * It has a SHGetFolderPathA exported by ordinal. (like the nt4 one has * SHGetFolderPathW on the _same_ ordinal). Later versions did it in a * clean way.
So if SHGetSpecialFolderPath* can be found this way, maybe SHGetFolderPath* could be found also? It is a pity I have no Win95 box at my hand and cannot test this situation with very old version of shell32.dll.
So, I don't think my suggestion is that different from Juergen's, just that I suggest an implementation of "try to simulate the appropriate behavior" if the function is not in fact in shell32.
Yes, I understand now. IMHO, the easiest way still would be to move the code from shell32 to shfolder. But forget it.
[1] http://www.winehq.org/hypermail/wine-devel/2000/12/0049.html