Думаю, что неправильны у тебя вот эти 2 строчки:
T> V_BSTR(pVarResult) = AnsiToOLESTR((char *)_GetReminderDate(Idx).c_str());
T> V_BSTR(pVarResult) = AnsiToOLESTR((char *)_GetReminderDescr(Idx).c_str());
Ты возвращает указатель на OLESTR, а не BSTR. OLESTR по структуре выглядит также, но память под BSTR распределяется совсем иначе.
T>то в диалоге появляется результат работы только одной функции (почему-то именно GetReminderDate, независимо от порядка вызова). очевидно, что грабли с распределением памяти, но как их обойти я не знаю. что делать?
Замени это дело на:
V_BSTR(pVarResult) = SysAllocString(_GetReminderDate(Idx).c_str()) (ну и вторую соответственно).