CTimeからVariantTime(DATE)に変換するTips

突然ですが、一瞬悩んだので備忘録。
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;
}