C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по работе с компонентом Chromium embedded (dcef).  (Прочитано 1452 раз)
Andy JOKER
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 16


Вопрос по работе с компонентом Chromium embedded (dcef).
« : 07 Октябрь 2016, 14:26:25 »

Всем привет!
Поставил в 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'ы?
« Последнее редактирование: 07 Октябрь 2016, 14:38:48 от Andy JOKER » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.065 секунд. Запросов: 19.