вернуть строку из Invoke (bcb)
От: twask  
Дата: 10.01.02 19:23
Оценка:
мне нужно вернуть строку из функции, которую дергает js-скрипт в webbrowser control.
сейчас делаю так:

HRESULT STDMETHODCALLTYPE TDocHostDispatch::Invoke(
DISPID dispIdMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS *pDispParams,
VARIANT *pVarResult,
EXCEPINFO *pExcepInfo,
UINT *puArgErr)
{
switch (dispIdMember)
{
case DISPID_getreminderdate:
Idx = (int)Variant(pDispParams->rgvarg[0]);
VariantInit(pVarResult);
V_VT(pVarResult) = VT_BSTR;
V_BSTR(pVarResult) = AnsiToOLESTR((char *)_GetReminderDate(Idx).c_str());
break;
case DISPID_getreminderdescr:
Idx = (int)Variant(pDispParams->rgvarg[0]);
VariantInit(pVarResult);
V_VT(pVarResult) = VT_BSTR;
V_BSTR(pVarResult) = AnsiToOLESTR((char *)_GetReminderDescr(Idx).c_str());
break;
}

return S_OK;
}

_GetReminderDate(Idx) и _GetReminderDescr(Idx) возвращают AnsiString.

если я ограничиваюсь вызовом external.GetReminderDate(1), то все правильно отрабатывает, если я делаю следующим образом:

t = external.GetReminderDescr(1);
s = external.GetReminderDate(1);
alert(s + t);

то в диалоге появляется результат работы только одной функции (почему-то именно GetReminderDate, независимо от порядка вызова). очевидно, что грабли с распределением памяти, но как их обойти я не знаю. что делать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.