In the platform SDK's shlobj.h I find:
HANDLE _SHAllocShared(LPCVOID pvData, DWORD dwSize, DWORD dwDestinationProcessId);
Notice the lack of a WINAPI and the leading underscore. So this would indicate a cdecl API. But in dlls/shell32/undocshell.h I see:
HANDLE WINAPI SHAllocShared(LPVOID pv, ULONG cb, DWORD pid);
This really looks like the same function, just without the underscore. Furthermore shell32.spec says:
520 stdcall SHAllocShared (long long long)
So who's right? The platform SDK that says this is a cdecl function or Wine's headers?
There's the same issue for SHFreeShared, SHLockShared and SHUnlockShared.
Still looking in undocshell.h, I see we have:
BOOL WINAPI GetFileNameFromBrowse( HWND hwndOwner, LPSTR lpstrFile, DWORD nMaxFile, LPCSTR lpstrInitialDir, LPCSTR lpstrDefExt, LPCSTR lpstrFilter, LPCSTR lpstrTitle);
But in the Platform SDK's the prototype is:
SHSTDAPI_(BOOL) GetFileNameFromBrowse(HWND hwnd, LPWSTR pszFilePath, UINT cbFilePath,LPCWSTR pszWorkingDir, LPCWSTR pszDefExt, LPCWSTR pszFilters, LPCWSTR pszTitle);
So is this an Ansi or a Unicode function? Or maybe it's one of these AW Ansi/Unicode functions? In that case the implementation is wrong because it definitely expects to receive Ansi strings.
Same question for PickIconDlg().