본문 바로가기

프로그래밍/Chromium(CEF4Delphi)

[Chromium] CEF4Delphi 초기화 / 해제

크롬 웹브라우저를 응용 어플리케이션에 내장시켜 사용하기 위해서는 크롬 어플리케이션에 대한 Initialize / Finalize가 필요 합니다.

//크롬 어플리케이션 모듈 초기화
procedure InitializeCEF4Delphi;
begin
  GlobalCEFApp := TCefApplication.Create;

  // 크롬 웹브라우저를 사용하기 위해서는 반드시 CEF3 Binaries 파일 또는 캐시, 쿠키, 사용자 데이터 정보들이 필요한데
  // 크롬 어플리케이션 초기화시에 다음 주석처리 부분을 활성화 시켜서 각종 라이브러리 바이너리 파일 또는 언어권 데이터 정보, 캐시, 사용자 데이터 경로 정보를 관리할
  // 경로를 지정해 주어야 합니다.(캐시 및 사용자 데이터, 로그로 지정된 경로 및 파일은 쓰기 가능한 상태여야 합니다.
  // 주석처리를 하면, 다운받은 CEF4 Binaries의 모든 파일들이 프로그램이 생성/실행되는 경로에 있어야 합니다. 
{
  GlobalCEFApp.FrameworkDirPath     := 'cef';
  GlobalCEFApp.ResourcesDirPath     := 'cef';
  GlobalCEFApp.LocalesDirPath       := 'cef\locales';
  GlobalCEFApp.cache                := 'cef\cache';
  GlobalCEFApp.UserDataPath         := 'cef\User Data';
  GlobalCEFApp.LogFile              := 'debug.log';
  GlobalCEFApp.LogSeverity          := LOGSEVERITY_INFO;
}

  GlobalCEFApp.WindowlessRenderingEnabled := True;
  GlobalCEFApp.EnableHighDPISupport       := True;
  GlobalCEFApp.SetCurrentDir              := True;
  //GlobalCEFApp.BrowserSubprocessPath      := 'OSRSubProcess.exe';
  GlobalCEFApp.ExternalMessagePump        := False;
  //GlobalCEFApp.MultiThreadedMessageLoop   := False;
  GlobalCEFApp.DisableFeatures            := 'NetworkService,OutOfBlinkCors';

  GlobalCEFApp.StartMainProcess;
end;

//어플리케이션 종료시 크롬 모듈에 대한 해제 작업을 반드시 해 주어야 합니다.
procedure FinalizeCEF4Delphi;
begin
  DestroyGlobalCEFApp;
end;

일반적인 형태의 프로젝트(.dpr)에서 초기화 하는 방법(Simple Browser)

program SimpleBrowser;

{$I cef.inc}

uses
  {$IFDEF DELPHI16_UP}
  Vcl.Forms, WinApi.Windows,
  {$ELSE}
  Forms, Windows,
  {$ENDIF}
  uCEFApplication,
  uSimpleBrowser in 'uSimpleBrowser.pas' {Form1};

{$R *.res}

// 32bit 응용 프로그램에서 3G 이상의 이미지 처리를 위해서 RAM확장이 필요한 경우 아래 컴파일 지시자를 지정
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}

begin
  GlobalCEFApp := TCefApplication.Create;

//바이너리 및 캐시, 쿠키, 사용자 데이터 경로를 지정하는 경우 활성 처리.
{
  GlobalCEFApp.FrameworkDirPath     := 'cef';
  GlobalCEFApp.ResourcesDirPath     := 'cef';
  GlobalCEFApp.LocalesDirPath       := 'cef\locales';
  GlobalCEFApp.EnableGPU            := True;      // Enable hardware acceleration
  GlobalCEFApp.cache                := 'cef\cache';
  GlobalCEFApp.cookies              := 'cef\cookies';
  GlobalCEFApp.UserDataPath         := 'cef\User Data';
}

  // 안정성을 향상시키기 위한 특정 옵션 비활성화 처리.
  GlobalCEFApp.DisableFeatures  := 'NetworkService,OutOfBlinkCors';

  //크롬 모듈이 반드시 필요한 경우 조건 처리에 의한 메인 프로세스 시작 
  if GlobalCEFApp.StartMainProcess then
    begin
      Application.Initialize;
      {$IFDEF DELPHI11_UP}
      Application.MainFormOnTaskbar := True;
      {$ENDIF}
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end;

  GlobalCEFApp.Free;
  GlobalCEFApp := nil;
end.

 

** 혹시 컴파일시 IMAGE_FILE_LARGE_ADDRESS_AWARE가 정의되어 있지 않다는 오류가 발생한다면 다음과 같이 해당 상수를 선언해 주면 해결 된다.

32비트 윈도에서 돌아가는 프로그램이 최대한 사용할 수 있는 메모리는 2GB까지입니다. 32비트 윈도의 실행 스위치(/3GB)를 조절하면 3GB 까지 사용할 수 있고 64비트 윈도에서는 최대 4GB까지 사용할 수 있습니다(정확한 메모리 사용량 정보는 MS Knowledge Base Q889654 참조). 하지만 두가지 경우 모두 실행 파일의 옵션에 LARGEADDRESSAWARE 옵션이 켜져 있어야만 가능

const
    IMAGE_FILE_LARGE_ADDRESS_AWARE = $0020;