A simple solution would be to write your own function that also recognizes empty tokens. It could look like this:
CString MyTokenize(CString& source, const LPCWSTR& delimeter, int& first)
{
CString token;
int count, end = source.Find(delimeter, first);
if (end != -1) {
count = end - first;
token = source.Mid(first, count);
first = end + 1; }
else {
count = source.GetLength() - first;
token = source.Mid(first, count);
first = -1; }
return token;
}