Всем привет!
Поставил в XE5 на замену стандартному CppWebBrowser сиё чудо инженерной мысли. На пагу заходит, всё вроде работает.
Необходимо получить header'ы (ну там всякие Host, Connection, User-Agent и пр.).
Отлавливаю в событии OnBeforeResourceLoad.
На дельфях вроде как все просто:
procedure TForm1.Chromium1BeforeResourceLoad(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame;
const request: ICefRequest; out Result: Boolean);
Var
map: ICefStringMultimap;
begin
map := TCefStringMultimapOwn.Create;
request.GetHeaderMap(map);
map.Append('Accept-Language', 'ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4');
request.SetHeaderMap(map);
end;
В билдере же оно хочет получить не
TCefStringMultimapOwn, а
const _di_ICefStringMultimap.
Да не вопрос, я бы с удовольствием. Только понять не могу как создать то этот const _di_ICefStringMultimap?
В ceflib.hpp оно объявлено так:
__interface ICefStringMultimap;
typedef System::DelphiInterface _di_ICefStringMultimap;
__interface INTERFACE_UUID("{583ED0C2-A9D6-4034-A7C9-20EC7E47F0C7}") ICefStringMultimap : public System::IInterface
{
public:
virtual void * __fastcall GetHandle(void) = 0 ;
virtual int __fastcall GetSize(void) = 0 ;
virtual int __fastcall FindCount(const ustring Key) = 0 ;
virtual ustring __fastcall GetEnumerate(const ustring Key, int ValueIndex) = 0 ;
virtual ustring __fastcall GetKey(int Index) = 0 ;
virtual ustring __fastcall GetValue(int Index) = 0 ;
virtual void __fastcall Append(const ustring Key, const ustring Value) = 0 ;
virtual void __fastcall Clear(void) = 0 ;
__property void * Handle = {read=GetHandle};
__property int Size = {read=GetSize};
__property ustring Key[int index] = {read=GetKey};
__property ustring Value[int index] = {read=GetValue};
__property ustring Enumerate[const ustring Key][int ValueIndex] = {read=GetEnumerate};
};
Если объявлять так как указано ниже, то при любом обращении или использовании вываливается AV:
_di_ICefStringMultimap header;
const_cast
(request)->GetHeaderMap(header);
// or
// int i=header->Size; Если так:
_di_ICefStringMultimap* header;
header=new _di_ICefStringMultimap;
То, пропадают свойства и методы, и компилятор ругается что: E2034 Cannot convert '_di_ICefStringMultimap *' to '_di_ICefStringMultimap'. С чего он взял, что это указатель на объект, когда это самый что ни на есть объект?
Подскажите, plz, может быть как-то по другому объявлять эти DelphiInterface'ы?