Событие TCefApplication::OnWebKitInitialized
объявлено с использованием типа TOnWebKitInitializedEvent
, который объявлен в единице uCEFInterfaces.pas
как:
TOnWebKitInitializedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure() {$IFNDEF DELPHI12_UP}of object{$ENDIF};
CEF определяет DELPHI12_UP
в Delphi / C ++ Builder2009 и более поздние версии.
Вы не сказали, какую версию C ++ Builder вы используете.
Если вы используете C ++ Builder 2007 или более раннюю версию,Событие OnWebKitInitialized
ожидает указатель на нестатический метод класса .
Если вы используете C ++ Builder 2009+, событие OnWebKitInitialized
ожидает анонимный метод вместо.
Поскольку вы упоминаете, что пытались использовать _di_TOnWebKitInitializedEvent
, который существует, только если TOnWebKitInitializedEvent
является анонимнымТип метода, я должен предположить, что вы используете C ++ Builder 2009 +.
В C ++ анонимные методы в стиле Delphi требуют специальной обработки, которую Embarcadero задокументировал:
Какобрабатывать анонимные методы Delphi в C ++
Вам нужно обернуть GlobalCEFApp_OnWebKitInitialized()
, чтобы использовать его как обработчик анонимных событий.Для этого у вас есть несколько вариантов в зависимости от того, используете ли вы классический компилятор Borland Win32 / OSX или один из более новых основанных на Clang компиляторов .
Classic : Вы должны написать функтор, который реализует интерфейс TOnWebKitInitializedEvent
:
class TWebKitInitRef : public TCppInterfacedObject<TOnWebKitInitializedEvent>
{
public:
INTFOBJECT_IMPL_IUNKNOWN(TInterfacedObject);
void __fastcall Invoke() { GlobalCEFApp_OnWebKitInitialized(); }
};
GlobalCEFApp->OnWebKitInitialized = _di_TOnWebKitInitializedEvent(new TWebKitInitRef());
Clang : Вы можете использовать лямбду C ++:
GlobalCEFApp->OnWebKitInitialized = [](){ GlobalCEFApp_OnWebKitInitialized(); };