|
15番会議室「FAQ編纂委員会」に寄せられた「よくある質問の答え」
[Q]
実行ファイルのサイズが随分大きいようですが。
[A]
リンク時のオプションである程度は小さくなりますが、VCLを使う限りそれ以上は
望めません。逆にVCLを使わないと極端に小さく出来ます。
しかしこれは高速開発を旨としたDelphiの長所のほとんどを放棄する事をも
意味し、全てを文字でプログラミングしなくてはなりません。具体的には全てを
APIとPascal関数のみで記述します。最低限以下のキーワードの意味が理解
出来ている必要があります。
「API」「ウィンドウハンドル」「ウィンドウメッセージ」
Delphi1.0であれば"DEMOS\GENERIC"フォルダにサンプルがあります。これで
ほぼ5KBのEXEを作る事が出来ます。Delphi2.0では同様のサンプルが無いので
この例をご参照下さい。
例: 以下のソースをProject1.dprという名前のテキストファイルとして
保存してコンパイルします。これはDelphi2.0を起動してF9を押すだけで
出来てしまうexeを模しています。サイズはおよそ8KBになります。
====================================================================
program Project1;
uses
Windows, Messages;
const
AppName = 'Project1';
// ----- WindowProc -----
function WindowProc(wndHdl:HWnd; msg,wParam:Word; lParam:Longint):
Longint; stdcall;
begin
case msg of
wm_Destroy: PostQuitMessage(0);
end;
Result:=DefWindowProc(wndHdl, msg, wParam, lParam);
end;
// ----- WinMain -----
function WinMain(hThisInst,hPrevInst:THandle; lpArgs:pChar; cmdShow:Integer):
Integer; stdcall;
var
wc: TWndClass;
wndHdl: HWnd;
msg: TMsg;
begin
{ウィンドウクラスの登録}
wc.style:=CS_HREDRAW or CS_VREDRAW;
wc.lpfnWndProc:=@WindowProc;
wc.cbClsExtra:=0;
wc.cbWndExtra:=0;
wc.hInstance:=hThisInst;
wc.hIcon:=LoadIcon(0,idi_Application);
wc.hCursor:=LoadCursor(0,idc_Arrow);
wc.hbrBackground:=Color_BtnFace +1;
wc.lpszMenuName:=AppName;
wc.lpszClassName:=AppName;
Windows.RegisterClass(wc);
{ウィンドウの生成}
wndHdl:=Windows.CreateWindowEX(
0,
AppName,
'Project1',
ws_OverlappedWindow,
200,
107,
435,
300,
0,
0,
hInstance,
nil
);
ShowWindow(wndHdl,cmdShow);
UpdateWindow(wndHdl);
{メッセージを捕まえるループ}
while msg.message<>WM_QUIT do begin
if PeekMessage(msg,0,0,0,pm_Remove)=True then begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end;
end;
{エントリーポイント}
begin
WinMain(hInstance,0,nil,cmdShow);
end.
====================================================================
以上はFDELPHI 10番ライブラリー226番の「小さいEXEを作りたい!!」から
の抜粋ソースです。この中には以下の32bitサンプルソースが含まれます。
EXEサイズ
・オールAPIプログラミングの基礎習得用。……( 8,192B)(←これが上記ソース)
・ダイアログリソースを使うアプリ。 …………(15,360B)
・テキストエディタの雛形。 ……………………( 9,728B)
・コマンドラインツール。 ………………………(14,336B)
・ウィンドウの無いサブEXE………………………(30,720B)
・メッセージボックスのみ ………………………( 3,072B)(←これのみ16bit)
尚Delphi3ではVCLをDLLに分割する事によってEXEサイズを抑える手法が
使えるそうですが、このFAQを書いている時点ではまだ発売されていない
ので言及を控えさせて頂きます。
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum FDELPHIに寄せられる質問の中から、よくある質問への回答を FDELPHIのメンバーがまとめたものです。 したがって、これらの回答はボーランド株式会社がサポートする公式のものではなく、掲示されている内容についての問い合わせは受けられない場合があります。
Copyright 1996-1998 Delphi Users' ForumFAQ編纂委員会
|