-
GraySE (21.07.08 16:02) [0]Привет!
Есть обработка событий COM объекта - WebBrowser.
Подключён к DWebBrowserEvents2. Вот описание интерфейса.
DWebBrowserEvents2 = dispinterface
...
procedure BeforeNavigate2(const pDisp: IDispatch; var URL: OleVariant; var Flags: OleVariant;
var TargetFrameName: OleVariant; var PostData: OleVariant;
var Headers: OleVariant; var Cancel: WordBool); dispid 250;
...
end;
Делаю обработку этого метода:
function TWebBrowserEvents.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult;
var
P: TDispParams absolute Params; // Это, как я понял параметры метода BeforeNaviagte2
begin
case DispID of
250: // BeforeNavigate2
begin
// Вывод заголовков
end;
end;
end;
Насколько я понял, параметр Params - содержит массив параметров метода BeforeNavigate2 интерфейса DWebBrowserEvents2. Как мне получить к ним доступ?
Конкретно - мне нужен доступ к заголовкам (параметр Headers). Мне нужно вывести все заголовки, полчаемые от интерфейса.
Как это сделать? Есть можно - с примером.
Спасибо. -
Сергей М. © (21.07.08 20:05) [1]unit SHDocVw тебе в руки
-
GraySE (22.07.08 08:59) [2]Подсмотрел там.
var
P: TVariantArray absolute Params;
...
begin
...
WriteLn(P[1]); // P[1] это URL
...
В итоге вижу пустую строку. Хотя P[1]: OleVariant и должен содержать URL. -
GraySE (22.07.08 09:21) [3]URL я нашёл. Он в P[5] лежит.
Значет (наверное) заголовки в P[1].
Как их прочитать ? Нигде этого нет. Подскажите на примере пожалуйста - как вывести массив. -
Сергей М. © (22.07.08 09:30) [4]
> должен содержать URL
Не должен.
В 1-м параметре, в соответствии с прототипом BeforeNavigate2, должен лежать адрес olevariant-значения (см. префиксvar
), а не само значение. -
Сергей М. © (22.07.08 09:37) [5]
> URL я нашёл. Он в P[5] лежит
Ну конечно в 5-м - соглашение-то stdcall (при вызове их передача происходит справа налево) ...
Соотв-но заголовки будут лежать по адресу (var
), указанному в 1-м параметре -
GraySE (22.07.08 10:52) [6]Про stdcall по ходу дела и понял, что справа налево параметры передаются.
Подскажи пожалуйста... Как получить массив из 1-го параметра (если он есть), и вывести его построчно. -
Сергей М. © (22.07.08 11:04) [7]А чему равно TVarData(P[1]).VType ?
-
GraySE (22.07.08 11:30) [8]TVarData(P[1]).VType = 16396
-
Сергей М. © (22.07.08 12:07) [9]Тогда, вероятно, доступ к искомым значениям осуществляется так:
v: OleVariant;
..
v := PVariant(TVarData(P[1]).VUnknown)^;