Для тех, кто все еще ищет, вы можете попробовать ответ Скотта. Вот как я это сделал, используя библиотеку ATLComTime.h, которая выполняет еще несколько шагов.
FileTime fileTime = yourFileTime;
// dateFileTime will automatically cast to DATE when used as a parameter
COleDateTime dateFileTime(fileTime);
С ДАТЫ является COM дружественный тип вы можете просто дать переменную «dateFileTime» в качестве параметра метода. Если вы все еще хотите использовать VARIANT, просто установите переменную dateFileTime в VARIANT.
VARIANT varDate;
VariantInit(&varDate);
varDate.vt = VT_DATE;
varDate.date = dateFileTime;
// Use the varDate varaible
// ... call some method or use locally
// Don't forget to clear the VARIANT from memory after use
VariantClear(&varDate);
В вызываемом методе (еще в C++), т.е. получение FILETIME назад от переменной DATE. COleDateTime хочет предоставить вам SYSTEMTIME вместо FILETIME, поэтому нам нужно перепрыгнуть через несколько обручей.
FILETIME fileTime;
if (variantDateTime.vt == VT_DATE) // only use if DATE was put into a VARIANT
{
COleDateTime oleDateTime(variantDateTime.date);
SYSTEMTIME sysTime;
oleDateTime.GetAsSystemTime(sysTime);
SystemTimeToFileTime(&sysTime, &fileTime);
}
Если вы не использовали ВАРИАНТ вы можете просто инициализировать тип COleDateTime с переменной DATE.
COleDateTime oleDateTime(dateVariable);
... // etc as above
Как уже говорилось выше, это немного больше работы, чем Скоттс ответ, но это еще один способ получить FILETIME через COM интерфейс барьера.
Вы действительно делаете это дважды, или это ошибка копирования/вставки? –
Извините, скопируйте ошибку патча. – Paws