Bueno, creo que ya lo tengo solucionado.
Investigando he entendido que es un variant:
Variants, SAFEARRAYS y BSTRs
Encapsulando un SAFEARRAY en el VARIANT puedo después extraer los datos facilmente como chars.
Código:
void CIFDlg::OnDataArrivalWinsock(long bytesTotal)
{
lngt = (short) bytesTotal;
type = (short)(VT_ARRAY|VT_UI1);
m_Winsock.GetData( &data, type, lngt );
int Count= data.parray->rgsabound[0].cElements;
unsigned char *p = (unsigned char *)data.parray->pvData;
int i;
for(i=0; i<(int)bytesTotal; i++)
{
CString aux;
aux.Format( _T("Value %c"), *p );
MessageBox( aux );
p++;
}
}