Jochen Arndt
COleVariant
является производным от VARIANT
(Типы данных VARIANT и VARIANTARG [автоматизация][^]) который является просто union
.
Поэтому вы должны проверить vt
член и доступ только к соответствующему полю данных. Если ваш olevar
содержит double
(vt
является VT_R8
), соответствующее поле dblVal
Доступ к любым другим полям может привести к неправильным значениям или неопределенному поведению.
Вы можете сделать преобразование самостоятельно:
CString str;
if (oleVar.vt == VT_R8)
str.Format(_T("%E"), oleVar.dblVal);
Другой вариант-преобразование типа варианта с помощью
COleVariant:: ChangeType[
^]:
oleVar.ChangeType(VT_BSTR);
CString str = oleVar.bstrVal;
Обратите внимание также, что никакого приведения к
LPCTSTR
используется в приведенном выше примере.
BSTR
всегда является Юникодом, и приведенное выше назначение преобразует строку в ANSI с не-Юникодными сборками при приведении к
LPCTSTR
не будет работать с не-Юникодными сборками (он будет копировать только первый символ).