Как вызвать скрипт из приложения?
При использовании WebBrowser Вы можете вызывать любые скрипты, расположенные в теле html-страницы. Обращение к скриптам производится через диспетчерский интерфейс, возвращаемый в свойстве Scriptинтерфейса IHTMLDocument.
В следующем примере демонстрируется вызов функции с именем evalute, которая определена в теле html-страницы следующим образом.
function evaluate(x) {
alert(x + "= " + eval(x));
}
// Эта функция выполняет скрипт
void CMyHtmlView::OnCallscript() {
HRESULT hr;
LPDISPATCH pDispatch = GetHtmlDocument();
if (pDispatch == NULL) return;
IHTMLDocument* pHtmlDoc;
hr = pDispatch->QueryInterface(__uuidof(IHTMLDocument), (void**)&pHtmlDoc);
LPDISPATCH pScript;
pHtmlDoc->get_Script(&pScript);
pScript->AddRef();
if (SUCCEEDED(hr)) {
// Получаем DISPID интересуемой функции
OLECHAR* szMember = L"evaluate";
DISPID dispid;
HRESULT hr = pScript->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if (SUCCEEDED(hr)) {
// Выполняем
COleVariant vtResult;
static BYTE parms[] = VTS_BSTR;
COleDispatchDriver dispDriver(pScript);
dispDriver.InvokeHelper(dispid, DISPATCH_METHOD, VT_VARIANT, (void*)&vtResult, parms, "5+Math.sin(9)");
}
}
pScript->Realease();
pHtmlDoc->Release();
pDispatch->Release();
}
Тема:Коллеги, улыбнитесь
От: adonz
…В продолжение темы:
• Главная программа – функции malloc: Прошу обеспечить выделение 257 килобайт Conventional Memory.
• Функция malloc – операционной системе: Прошу выделить 257 килобайт Conventional Memory в связи с производственной необходимостью.
• Операционная система – главной пpограмме: Выделить 257 килобайт Conventional Memory не представляется возможным в связи с отсутствием таковых. Есть 3 мега Extended. Берете?
• Главная программа – обработчику исключений: С памятью облом. Что делать будем?
• Обработчик исключений – процедуре оптимизации: Необходимо добиться экономии памяти за счет более pационального использования системных ресурсов.
• Контроллер прерываний – обработчику прерываний: Тут это… юзер кнопку нажал…
• Главная программа – обработчику прерываний: Hе дергайся! Подержит и отпустит.
• Процедуpа оптимизации – обработчику исключений: Готово!
• Главная программа – обработчику исключений: Ну что там?
• Обработчик исключений – главной программе: Еще хуже стало. Может, на диск посвопимся?
• Главная программа – жесткому диску: Прошу принять на хpанение swap-файл в размере 257 килобайт.
• Жесткий диск – главной программе: Ваша просьба не может быть удовлетворена за недостатком места.
• Главная программа – опеpационной системе: Что еще за глюк? Было же место!
• Жесткий диск – главной программе: Ничего не глюк. Вы еще прошлый swap-файл на 4 мега не забрали. А я, между пpочим, не резиновый. И даже не stacker'ный.
• Контроллер прерываний – обработчику прерываний: Тут это… юзер опять кнопку давит…
• Обработчик прерываний – PC speaker'у: Hу скажи ему что-нибудь, пусть отвяжется!
• PC speaker – юзеру: Биип!
• Главная программа – операционной системе: Ну может можно чего-нибудь перераспределить?
• Операционная система – главной программе: Другим задачам тоже память нужна. Вам что, General Protection Error схлопотать охота?
• Главная программа – хакерской функции: Ну-ка выясни, кто там отожрал всю память, и выкини их к XTшной матеpи!
• Контроллер прерываний – обработчику прерываний: Тут юзер Ctrl-Alt-Del жмет!
• Главная программа – обработчику прерываний: Да отруби ты этому зануде клавиатуpу! Мы тут делом заняты…
• Хакерская функция – главной программе: Опаньки!
• Главная программа – операционной системе: Ну что там? Сколько памяти свободно?
• Операционная система – главной программе: 320 Conventional и… ой, куда это Extended Memory Manager делся?
• Главная программа – хакерской функции: Ты что начистила, сволочь?
• Хакерская функция – главной программе: А чо я, чо я? Мне сказали – выкинуть, я и выкидываю!
• Функция malloc – операционной системе: Прошу выделить 257 килобайт Conventional Memory в связи с производственной необходимостью.
• Операционная система – главной программе: Не могу. У меня в Extended Memory важные данные лежали. И вообще, я с вами скоро повешусь!
• Кнопка Reset – процессору: Ну что? Доигрались?
… ХОЛОДHЫЙ РЕСТАРТ…
• Autoexec.bat – главной программе: Так на чем мы остановились?
Это все на сегодня. Пока!
Алекс Jenter jenter@rsdn.ru Duisburg, 2001. Публикуемые в рассылке материалы принадлежат сайту RSDN.
Программирование на Visual C++
Читать дальше