Возвращение строки в JavaScript из функции C ++

У меня есть класс (JSObject), который реализует интерфейс IDispatch. Класс работает с JavaScript, запущенным в моем размещенном веб-браузере (IWebBrowser2).

Узнайте больше о том, как это работает:Вызов функции C ++ из JavaScript-скрипта, запущенного в веб-браузере

Я могу позвонить в JSObject из своего кода JavaScript и получить возвращенные целые / длинные числа. Но что-то идет не так, когда функция возвращает строку (BSTR).

Это частьIDispatch::Invoke() код:

int lenW = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, "Returned string", -1, 
    NULL, 0);
BSTR bstrRet = SysAllocStringLen(0, lenW);
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, "Returned string", -1, bstrRet, 
    lenW);

pVarResult->vt = VT_BSTR;
pVarResult->bstrVal = bstrRet;

// Who calls SysFreeString(bstrRet);?

С помощью приведенного выше кода вы можетеalert() возвращенная строка, но вы не можете добавить к ней.alert(returnedString + "foo"); будет отображаться только «Возвращенная строка». Часть "foo" не добавляется в строку. Кажется, что-то не так с концом строки. Любые идеи кто-нибудь?

Кроме того, я теряю память здесь, так как я не звонюSysFreeString()?

РЕДАКТИРОВАТЬ:

Я временно включил atlbase.h, чтобы я мог использоватьCComBSTR, Вышеприведенный код теперь выглядит так:

pVarResult->vt = VT_BSTR;
pVarResult->bstrVal = CComBSTR("test string");

Выполнение этого кода определенно показывает, что pVarResult является «тестовой строкой» до тех пор, пока функция не вернется. Но когда я оповещаю () возвращенную строку в моем коде JavaScript, я «раскрываюсь».alert(returnedString + "foo") это "расширенный foo". Так что это небольшой шаг в правильном направлении, поскольку вы можете добавить к возвращаемой строке. Но это также шаг в неправильном направлении, поскольку возвращаемая строка - это не то, что я действительно вернул ...

*pVarResult = CComVariant("test string");

Этот код дает те же результаты, что и код в предыдущем листинге (с использованием CComBSTR).

Ответы на вопрос(2)

Ваш ответ на вопрос