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.