For oleautomation type, there are VT_xxx types:
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = m_cPoints;
psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
For custom types, there is IRecordInfo:
SafeArrayCreateEx(VT_RECORD, 1, &rgbounds, pRecInfo);
But what is the right type for windows' system type such as POINT?