大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> 用Delphi产生一个最小的可执行程序

用Delphi产生一个最小的可执行程序

时间: 2021-07-31 作者:daque

已经在网上看到有人说delphi不妨爆发巨细惟有16k的win32运用步调,而我本人已经编写过的这种可实行文献巨细则是在17k安排,所以我一番估计delphi害怕也只能将代码优化到这种水平了。迩来因为尝试的手段从新把这个步调写了一遍,才创造运用少许本领,还不妨将文献的巨细进一步削减到8.5k。这个步调也不妨表露delphi动作一致于visual c++的、非rad东西的另一个侧面。即使你对此感爱好的话,请看我是怎样做到这一点的。用delphi天生一个默许的名目,而后用功具栏上的remove file from project按钮,将独一的窗体(form1)从名目中简略。而后采用view->project source吩咐,翻开名目文献,并编纂代码如次所示:program miniapp;uses  windows, messages;// {$r *.res}const  szappname : pchar = 'miniapp';function wndproc(awnd:hwnd; message:uint; wp:wparam; lp:lparam):lresult;stdcall;begin  result := 0;  case message of    wm_destroy:       postquitmessage(0);    else       result := defwindowproc(awnd, message, wp, lp);  end;end;var  wc : wndclass;  hmainwnd : hwnd;  amsg : msg;begin  with wc do begin    style := cs_vredraw or cs_hredraw;    lpfnwndproc := @wndproc;    cbclsextra := 0;    cbwndextra := 0;    hicon := loadicon(0, idi_application);    hcursor := loadcursor(0, idc_arrow);    hbrbackground := getsyscolorbrush(color_window);    hinstance := hinstance;    lpszmenuname := nil;    lpszclassname := szappname;  end;  registerclass(wc);  hmainwnd := createwindow(szappname,                           szappname,                           ws_overlappedwindow,                           integer(cw_usedefault), integer(cw_usedefault),                           integer(cw_usedefault), integer(cw_usedefault),                           hwnd_desktop, 0,                           hinstance, nil);  showwindow(hmainwnd, cmdshow);  updatewindow(hmainwnd);  while getmessage(amsg, 0, 0, 0) do begin    translatemessage(amsg);    dispatchmessage(amsg);  end;end.本来那些代码基础即是win32 sdk中c谈话例子步调的翻版,我想没有需要再对它们作什么证明了。须要指示你提防的是:1.delphi步调没有像c步调那么的winmain进口,步调的运转就从.dpr文献的begin发端,到与之配合的end中断。而c步调中传播给winmain的四个参数,在delphi中则以全部变量的情势设置在system以及sysinit单位中,它们辨别是hinstance、hprevinst、cmdline和cmdshow(hprevinst仍旧没有意旨)。2.提防我把恒量szappname设置为pchar,而不是常用的string,由于在这么一个大略的步调中没有需要运用string的高档功效,如许不妨俭朴不少空间(大概3-4k)。3.我把{$r *.res}一句也解释起来了,如许不妨从文献中剔除冗余的资源,进而俭朴大概1k安排的空间。4.步调实行后,翻开project options对话框,翻到compiler页,将runtime errors和debugging分门别类中的选项十足废除,如许也不妨略微减小最后文献的巨细。纵然还不许说8.5k确定即是最小的尺寸,然而我估计这仍旧特殊逼近delphi的极限了。在visual c++中,很有道理的一点是一切可实行文献的巨细城市对齐到4k的边境,以是在visual c++中最小的.exe和最小的.dll巨细都只能到达28k,只有运用少许特殊特出的湮没编写翻译电门。纵然win3第22中学的分页默许是4k,然而我简直想不通visual c++把可实行文献的巨细也对齐到4k毕竟有什么意旨?其余,我手边再有一套特殊特殊陈旧的turbo pascal for windows 1.5,它所编写翻译出的最小的windows可实行文献的巨细——你确定没辙断定——惟有1.75k!固然了,它究竟不过个win16步调罢了。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.