void __fastcall TForm1::CppWebBrowser1BeforeNavigate2(TObject *Sender,
LPDISPATCH pDisp, Variant *URL, Variant *Flags,
Variant *TargetFrameName, Variant *PostData, Variant *Headers,
VARIANT_BOOL *Cancel)
{
String a = *URL;
Form1->Memo1->Lines->Add(a);
a=*PostData;
Form1->Memo1->Lines->Add(a);
a=*TargetFrameName;
Form1->Memo1->Lines->Add(a);
a=*Headers;
Form1->Memo1->Lines->Add(a);
}
Проблема Variant *PostData
Как просмотреть информацию передаваемую на сервер (метод post)??
На форме компонент CppWebBrowser1 и Memo1
Событие OnBeforeNavigate2
Код:
Судя по справке в Variant *PostData храниться передаваемая информация
Но она почему то отображаются так "???????????+??????????????????????????????????n"
а URL и Headers нормально.
Заранее спасибо за любую помощь.
Приведи данные к отображаемому типу - и любуйся.
если речь идет о дебилдере 6 - то надо выполнять конвертацию.
И читать здесь
есть html страница вот она
Код:
<form method="post" action="1.php">
Логин:<br><input type="edit" name="login"><br>
Пароль:<br><input type="password" name="pas"><br>
<input type="submit" value="Ok">
</form>
Логин:<br><input type="edit" name="login"><br>
Пароль:<br><input type="password" name="pas"><br>
<input type="submit" value="Ok">
</form>
как видно она передает в 1.php методом post информацию которую ввели.
1.php в свою очередь вот он
Код:
<?php
echo '<pre>';
print_r($_POST);
?>
echo '<pre>';
print_r($_POST);
?>
принимает и отображает пост масив.
И виходит следующее
Array
(
[login] => 2
[pas] => 2
)
Вот ето я и хочу виципить!
в дебилдере 6 мне не понятно почему в *PostData отображаеться ето ??????2
И как получить ето [login] => 2 [pas] => 2??
Приведи данные к отображаемому типу
a=*PostData;
Form1->Memo1->Lines->Add(a);
А ето разве я не привел к отображаемому типу??
как выполнять конвертацию.
У тебя передаваемые данные представлены в UTF-8 либо в Unicode. Соотвественно тебе либо надо использовать те IDE которые работают нормально с юникодом, либо выполнять преобразование например WideString -> AnsiString, например используя функцию WideCharToMultiByte.
Используй поиск по форуму - тема обсуждалась.
Цитата: kot_
У тебя передаваемые данные представлены в UTF-8 либо в Unicode. Соотвественно тебе либо надо использовать те IDE которые работают нормально с юникодом, либо выполнять преобразование например WideString -> AnsiString, например используя функцию WideCharToMultiByte.
Это тут ни причем ... URL и Headers есть - variant pointer to a BSTR, а PostData содержит SafeArray Bytes (указатель на SAFEARRAY) ясен пень если делать так
Код:
a=*PostData;
то получится лажа...
аффтар учись работать с вариантными массивами...
ну это само собой что так нельзя.
STDMETHODIMP CWebOCWindow::BeforeNavigate2(IDispatch *pDisp, VARIANT *URL,
VARIANT *Flags, VARIANT *TargetFrameName,
VARIANT *PostData, VARIANT *Headers,
VARIANT_BOOL *Cancel)
{
if (PostData != NULL && PostData->vt == (VT_VARIANT|VT_BYREF) && PostData->pvarVal->vt != VT_EMPTY )
{
char *szTemp = NULL, *szPostData = NULL;
long plLbound, plUbound;
SAFEARRAY *parrTemp = PostData -> pvarVal->parray;
SafeArrayAccessData(parrTemp , (void HUGEP **) &szTemp);
SafeArrayGetLBound(parrTemp , 1, &plLbound);
SafeArrayGetUBound(parrTemp , 1, &plUbound);
szPostData = new char[plUbound - plLbound + 2];
StrCpyN(szPostData, szTemp, plUbound - plLbound + 1);
szPostData[plUbound-plLbound] = '\0';
SafeArrayUnaccessData(parrTemp);
Form1->Memo1->Lines->Add(URLDecode(szPostData));
delete[] szPostData;
}
return S_OK;
}
Проблема решена тему можна закрить!
инфа тут http://support.microsoft.com/kb/256195