Re[2]: вернуть строку из Invoke (bcb)
От: twask  
Дата: 11.01.02 15:28
Оценка:
Здравствуйте 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;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.