* On Sat, 3 Sep 2005, Saulius Krasuckas wrote:
- On Sat, 3 Sep 2005, Paul Vriens wrote:
this change to shell32/tests/shlfolder.c fails on Win98/WinNT and W2KProf because ILFindLastID is not exported on those platforms.
I tried to change shlfolder.c to test for the export, but that shows that it's not exported on Wine either ? The .spec file says different.
I have made pretty trivial change and it worksforme. See below.
--- dlls/shell32/tests/shlfolder.c 29 Aug 2005 21:45:49 -0000 1.34 +++ dlls/shell32/tests/shlfolder.c 3 Sep 2005 16:48:35 -0000 @@ -46,6 +46,7 @@ static IMalloc *ppM; static HRESULT (WINAPI *pSHBindToParent)(LPCITEMIDLIST, REFIID, LPVOID*, LPCITEMIDLIST*); static BOOL (WINAPI *pSHGetSpecialFolderPathW)(HWND, LPWSTR, int, BOOL); static HRESULT (WINAPI *pStrRetToBufW)(STRRET*,LPCITEMIDLIST,LPWSTR,UINT); +static LPITEMIDLIST (WINAPI *pILFindLastID)(LPCITEMIDLIST);
static void init_function_pointers(void) { @@ -57,6 +58,7 @@ static void init_function_pointers(void) { pSHBindToParent = (void*)GetProcAddress(hmod, "SHBindToParent"); pSHGetSpecialFolderPathW = (void*)GetProcAddress(hmod, "SHGetSpecialFolderPathW");
pILFindLastID = (void *)GetProcAddress(hmod, "ILFindLastID");
Hehehe, now I see it dies by cathing exeption when ir tries to read 0x00000000, though "make test" doesn't say this is an error.
Alexandre, is this intentional behaviour of an in-tree testing framework? (to treat crashes during "make test" as a success)
Paul, it seems you were right -- Wine doesn't export this by name. I guess we need to copy in a more robust run-time linking code from the dlls/shell32/shellpath.c file and to access function by its number (16):
$ grep -C1 ILFindLast dlls/shell32/shell32.spec | 15 stdcall -noname ILGetDisplayName(ptr ptr) | 16 stdcall -noname ILFindLastID(ptr) | 17 stdcall -noname ILRemoveLastID(ptr)
I going to buy some food now. If no one is going to send a patch during next 40 minutes, I will be ready to do this. :-)