One reasonably common pattern is to have the return value indicate success / error, and you pass in a pointer to the value which will be mutated if successful.
Yep, lots of the Windows API does it this way.
Yep, lots of the Windows API does it this way.