Для тех, кто все еще ищет, вы можете попробовать ответ Скотта. Вот как я это сделал, используя библиотеку ATLComTime.h, которая делает еще несколько шагов.
FileTime fileTime = yourFileTime;
// dateFileTime will automatically cast to DATE when used as a parameter
COleDateTime dateFileTime(fileTime);
Поскольку DATE является дружественным для 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);
}
Если вы не использовали VARIANT, вы можете просто инициализировать тип COleDateTime с помощью переменной DATE.
COleDateTime oleDateTime(dateVariable);
... // etc as above
Как указывалось выше, это немного больше работы, чем Скоттс отвечает, но это еще один способ получить FILETIME через барьер интерфейса COM.