14

Chromium Embedded Framework(http://code.google.com/p/delphichromiumembedded/)は優れています。Delphiコードからのみ生成された静的HTML、JS、CSSを表示するために使用します。

しかし、私はそれが大きすぎると思います。

私は欲しい:

  • HTMLサポートが必要です
  • JavaScriptのサポートが必要です。
  • CSSサポートが必要です。
  • Unicodeのサポートが必要です。
  • OnNavigateイベントが必要です。

必要ありません:

  • D3D、GDI +、GLESのサポートは必要ありません。
  • Webページをロードする機能は必要ありません。LoadStringで十分です。
  • ロケールは必要ありません
  • キャッシングは必要ありません
  • 開発者ツールは必要ありません

可能な限り最小限の展開パッケージを使用することで、必要な機能を実現するにはどうすればよいですか?

現在、CEFには40MBのdllがあります。

4

2 に答える 2

10

CEFライブラリのサイズ自体を減らすには、完全に再構築し、デバッグフェーズを行う必要があります。今日のコンピュータの電力とネットワーク帯域幅によると、多くの時間を費やしましたが、おそらくそれだけの価値はありません。40MBは小さいです。私はむしろ、CEFの「公式」リリースに依存して、最新バージョンのブラウザーに注目し続けたいと思います。

問題がデプロイメントパッケージのサイズと単一の実行可能ファイル/インストール機能なしに関するものである場合は、dllの中にを埋め込むことを検討してくださいexe

私が使用したトリックは、.dllファイルがメイン内にzipとして保存され、ハードドライブ上のプライベート一時フォルダーに解凍されることです(同じフォルダーを使用することもできますが、Vistaのために.exe機能しませんC:\Program Files/ Seven UAC、およびユーザーは、これらすべてのファイルがどこから来ているのか疑問に思うかもしれません-それが私がプライベートフォルダーを使用する理由です)。

ユーザーの観点からは、実行する実行可能ファイルは1つだけです。すべての.dllファイルはその中で圧縮されており、いくつかの非バイナリリソースをファイルに追加することもできます(これはexe / dllコンパクターでは不可能です)。隠しフォルダーが作成され、ライブラリをロードするために使用され(静的にリンクされていない、でロードする必要がありますLoadLibrary())、解凍は1回だけ実行されます(したがって、exe / dllコンプレッサーを使用するよりも高速になります)。

たとえば、hunspell.dllライブラリと英語の辞書をSynProjectツールに埋め込むために使用しました。コードは次のようになります。

constructor THunSpell.Create(DictionaryName: string='');
var Temp, HunSpell, Aff, Dic: TFileName;
    i: integer;
begin
  if DictionaryName='' then
    DictionaryName := 'en_US';
  Temp := GetSynopseCommonAppDataPath;
  HunSpell := Temp+'hunspell.dll';
  with TZipRead.Create(HInstance,'Zip','ZIP') do
  try
    Aff := DictionaryName+'.aff';
    if not FileExists(Temp+Aff) then
      StringToFile(Temp+Aff,UnZip(NameToIndex(Aff)));
    Dic := DictionaryName+'.dic';
    if not FileExists(Temp+Dic) then
      StringToFile(Temp+Dic,UnZip(NameToIndex(Dic)));
    if not FileExists(HunSpell) then
      StringToFile(HunSpell,UnZip(NameToIndex('hunspell.dll')));
  finally
    Free;
  end;
  fHunLib := SafeLoadLibrary(HunSpell);
  if fHunLib=0 then
    exit;
  if not LoadEntryPoints then begin
    FreeLibrary(fHunLib);
    fHunLib := 0;
    exit;
  end;
  fDictionaryName := DictionaryName;
  fHunHandle := Hunspell_create(pointer(Temp+Aff),pointer(Temp+Dic));
  if fHunHandle=nil then
    exit;
   (....)
end;

詳細とソースコードについては、このリンクを参照してください。

BTMemoryModuleのような低レベルのハックの使用を検討することもできますが、圧縮の可能性はありません。

于 2011-11-22T06:55:01.593 に答える
3

必要な機能に応じて、ファイル/DLLの一部を省略できます。私はこれらを試して、除外することができました:

  • avcodec-53.dll
  • avcodec-54.dll
  • avformat-53.dll
  • avformat-54.dll
  • avutil-51.dll
  • ffmpegsumo.dll
  • libEGL.dll
  • libGLESv2.dll
  • cef.pak
  • chrome.pak
  • devtools_resources.pak

アプリケーションに埋め込まれたWebサイトを表示するために単純に使用すると、ビデオ再生機能と表示されないUIが失われると思います。

于 2014-03-19T10:48:54.300 に答える