@RLWA32 @Viorel I am finally able to access the data in C++. Many thanks for the help!
First, I was successfully able to get the the pointer to Variant Array inside VBA using VarPtr(), then pass it from VBA to C++ and access the data from there. After achieving that, I noticed that each VARIANT was 24 bytes apart from the previous one. I found this weird, because sizeof VARIANT returned 32 bytes (under the implementation I was using) in C++.
I then proceeded to port everything from Windows myself. I noticed that, while a ULONG would be 8-bytes long on Mac, it was only 4-bytes long on my PC. So I made use of int32_t/int64_t wherever it was fit.
Now I can get the data (almost) directly from a range in Excel! Just need to extract the .Value from it first, but for my use case that's good enough in terms of performance. I think I'll try to port the IDispatch interface now. That should be fun.