Why? Maybe it should be a Cardinal
Right.
but not a PCardinal since then I can only pass pointers to cardinals.
Sure a PCardinal, passing a Pointer to Cardinal is exactly what you are supposed to do :
"Address of an application-defined UINT value to be returned ... "