突然ですが、一瞬悩んだので備忘録。
ATL/MFCのCTimeをローカルに持っていて、COMでVariant Timeで返したいとき。
CTime -> SYSTEMTIME -> VariantTImeの流れで変換します。
STDMETHODIMP CSwPlaylogItem::get_PlayedDate(/* [retval][out] */ DATE *pVal) { if (!pVal) return E_INVALIDARG; SYSTEMTIME st; if (m_xPlaylogItem.m_PlayedTime.GetAsSystemTime(st)) { int nr = ::SystemTimeToVariantTime(&st, pVal); if (nr == 0) { DWORD dwError = ::GetLastError(); return HRESULT_FROM_WIN32(dwError); } } return S_OK; }