Здравствуйте Lexey, Вы писали:
T>> V_BSTR(pVarResult) = AnsiToOLESTR((char *)_GetReminderDate(Idx).c_str());
T>> V_BSTR(pVarResult) = AnsiToOLESTR((char *)_GetReminderDescr(Idx).c_str());
L>Ты возвращает указатель на OLESTR, а не BSTR. OLESTR по структуре выглядит также, но память >под BSTR распределяется совсем иначе.
T>>то в диалоге появляется результат работы только одной функции (почему-то именно >GetReminderDate, независимо от порядка вызова). очевидно, что грабли с распределением памяти, >но как их обойти я не знаю. что делать?
L>Замени это дело на: L>V_BSTR(pVarResult) = SysAllocString(_GetReminderDate(Idx).c_str()) (ну и вторую >соответственно).
спасибо! это то, что надо.
финальный вариант выглядит следующим образом:
V_BSTR(pVarResult) = SysAllocString(AnsiToOLESTR((char *)_GetReminderDate(Idx).c_str()));
кстати, возможно ли возвращать результат не только в pVarResult, но и в аргументы?
что-то в духе:
procedure x(a, b: integer; var y, z: integer);
begin
y := a + b;
z := a — b;
end;