C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
IWebBrowser2 и системная служба
GuLDaN
Отправлено: 08.05.2004, 10:13


Не зарегистрирован







Вопрос таков... может кто сталкивался.

Использую интерфейс IWebBrowser2, через CBuider (класс TCppWebBrowser).
Как то встала задача послать методом Post данные на форму. Решилось просто:
в метод Navigate в параметр Headers добавил строку
"Content-Type: application/x-www-form-urlencoded".

Но, когда встала задача, чтобы программулька заработала как сервис, то ничего не вышло.
Смотрю сниффером: этой строчки в заголовке пакета как не бывало.
В тоже время, когда запускаешь программульку, как обычное приложение (не меняя код),
то все идет отлично. Кто сталкивался: подскажите, где проблема?
Причем пример был в свое время честно передран из MSDN.
Листинг кусочка:

код:
--------------------------------------------------------------------------------


BSTR bstrHeaders = NULL;
TVariant vFlags = {6}, vTargetFrameName={0}, vPostData={0}, vHeaders={0};
LPSAFEARRAY psa;
LPCTSTR cszPostData = // Здесь я присваиваю то, что мне надо запихнуть на форму
UINT cElems = lstrlen(cszPostData);
LPSTR pPostData;
LPVARIANT pvPostData;
bstrHeaders = SysAllocString(L"Accept-Language: ru\nContent-Type: application/x-www-form-urlencoded\nAccept-Encoding: gzip, deflate\n");

if (!bstrHeaders)
{
/* Эта проверка всегда проходит нормально*/
Application->MessageBox("Could not allocate bstrHeaders", "Warning", MB_OK | MB_ICONWARNING);
return;
}
V_VT(&vHeaders) = VT_BSTR;
vHeaders = SysAllocString(bstrHeaders);
if (vHeaders == NULL)
{
/* Эта проверка тоже всегда проходит нормально*/
Application->MessageBox("Could not allocate vHeaders", "Warning", MB_OK | MB_ICONWARNING);
return;
}
V_VT(&vFlags) = VT_INT;
vFlags = 4;
pvPostData = vPostData;
if(pvPostData)
{
VariantInit(pvPostData);
psa = SafeArrayCreateVector(VT_UI1, 0, cElems);
if(!psa) return;
SafeArrayAccessData(psa, (LPVOID*)&pPostData);
memcpy(pPostData, cszPostData, cElems);
SafeArrayUnaccessData(psa);
V_VT(pvPostData) = VT_ARRAY | VT_UI1;
V_ARRAY(pvPostData) = psa;
}
MyBrowser->Navigate(sURL, &vFlags, &vTargetFrameName, &vPostData, &vHeaders);
SysFreeString (vHeaders);
SysFreeString (bstrHeaders);


Отредактировано GuLDaN — 08/05/2004, 11:16
Пaxa
Отправлено: 11.05.2004, 08:52


Ученик-кочегар

Группа: Участник
Сообщений: 17



как я понял я юзаю тот же кусок smile.gif
void __fastcall TfrmBrowse::Load(TCppWebBrowser *CppWebBrowser, String sURL, String sPostData)
// sPostData — как написано, и есть данные кот. отправляются
{
...
}

Вернуться в Вопросы программирования в C++Builder