对于那些仍在寻找的人,您可以尝试 Scott 的回答。下面是我使用 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++ 中),即从 DATE 变量中获取 FILETIME。
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,您可以使用 DATE 变量初始化 COleDateTime 类型。
COleDateTime oleDateTime(dateVariable);
... // etc as above
如上所述,它比 Scotts 的回答需要更多的工作,但它是通过 COM 接口屏障获取 FILETIME 的另一种方法。