Я пытаюсь преобразовать VARIANT из VT_DATE в инвариант VT_BSTR. Следующий код работает на Windows XP:PocketPC - преобразовать VT_DATE в инвариант VT_BSTR
VARIANT va;
::VariantInit(&va);
// set the variant to VT_DATE
SYSTEMTIME st;
memset(&st, 0, sizeof(SYSTEMTIME));
st.wYear = 2008;
st.wMonth = 9;
st.wDay = 22;
st.wHour = 12;
st.wMinute = 30;
DATE date;
SystemTimeToVariantTime(&st, &date);
va.vt = VT_DATE;
va.date = date;
// change to a string
err = ::VariantChangeTypeEx(&va,
&va,
LOCALE_INVARIANT,
0,
VT_BSTR);
Но PPC 2003 и Windows Mobile 5, выше код возвращает E_FAIL. Может кто-то исправить вышеуказанный код или предоставить альтернативу?
EDIT: После преобразования даты в строку, я использую строку для выполнения SQL-обновления. Я хочу, чтобы обновление работало независимо от региональных настроек устройства, поэтому я пытаюсь преобразовать его в «инвариантный» формат.
Я сейчас, используя следующие для преобразования даты в формат, который, как представляется, работает:
err = ::VariantTimeToSystemTime(va.date, &time);
if (FAILED(err))
goto cleanup;
err = strDate.PrintF(_T("%04d-%02d-%02d %02d:%02d:%02d.%03d"),
time.wYear,
time.wMonth,
time.wDay,
time.wHour,
time.wMinute,
time.wSecond,
time.wMilliseconds);
Я думал, что знаю, но я ошибся. Фактически вам разрешено использовать тот же VARIANT для источника и назначения. Можете ли вы добавить дополнительные сведения о том, как VARIANT устанавливается в VT_DATE? – 2008-09-22 16:44:23
Я изменил пример, чтобы проиллюстрировать настройку VT_DATE с тем же результатом E_FAIL. – 2008-09-22 17:56:27