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