去掉runtime package在工程管理器中

楼上说的不好搞,除非你在SYSTEM目录下装哪个DELPHI的DPL文件,否则不能运行,其实后可以用SDK函数来写程序,就是麻烦点,这样写文件体积是最小的.

weizhisheng(原作)
用Delphi产生一个最小的可执行程序

曾经在网上看到有人说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,除非使用一些非常特殊的隐藏编译开关。尽管Win32中的分页默认是4k,不过我实在想不通Visual C++把可执行文件的大小也对齐到4k究竟有什么意义?

另外,我手头还有一套非常非常古老的Turbo Pascal for Windows 1.5,它所编译出的最小的Windows可执行文件的大小—你肯定无法相信—只有1.75k!当然了,它毕竟只是个Win16程序而已。

为什么delphi编译生成的exe文件这么大?相关推荐

  1. 为什么delphi编译生成的exe文件这么大

    delphi 编译生成的 exe 文件,占用磁盘字节数比较大的原因在于,delphi 编译的文件中包含有其他的数据信息更多. 以下在 delphi xe 10 中,建立一个只包含空窗体的工程,通过多种 ...

  2. 【问题解决】VS2019解决编译生成的exe文件打不开的情况

    问题描述 本人是某计算机专业大学生,近期在用VS做大作业的时候,突然发现使用Release模式编译下的exe文件双击闪退.我在网上查了各种方法,也修改了相应的设置,但是仍然不管用. 解决方法 后来猛然 ...

  3. php编译减少大小,C++_减小VC6编译生成的exe文件的大小的方法,1、减小VC6编译生成的exe文件的 - phpStudy...

    减小VC6编译生成的exe文件的大小的方法 1.减小VC6编译生成的exe文件的大小,最有效的方法就是: 步骤: 1.使用release版本 2.代码中增加:#pragma comment(linke ...

  4. VsCode终端无法运行编译生成的exe文件解决方法

    #VsCode终端无法运行编译生成的exe文件解决方法 问题描述 g++编译生成exe文件,在默认终端中无法运行,包括直接运行test也不可 * 原因&解决方法 原因: 此时VsCode使用的 ...

  5. 解决pyinstaller打包exe文件过大(菜鸟一刀切傻办法)

    pyinstaller打包exe文件过大 作为认真学习了Python两个多月的小白,觉得python还是有很多玄学,一直搞不懂明明一毛一样的步骤,为什么我用pyinstaller打包出来的exe有30 ...

  6. pyinstaller打包exe文件太大解决方法

    pyinstaller打包exe文件太大的原因是把其它用不到的库也一起打包了,我的python用的Anoconda,本身带了很多库,代码打包后文件330MB,解决后只有29MB. 一.解决方法 解决方 ...

  7. Pyinstaller打包的exe文件过大的解决方法

    Pyinstaller打包的exe文件过大怎么办? 相信经常用python的朋友都会面临这么一个问题,那就是想把自己写好的python程序打包给别人使用.有的人就会问了"打包"是什 ...

  8. 使用pipenv建立虚拟环境解决python打包exe文件过大的问题(附打包带图标,多个py文件打包exe)

    我们编写的程序可以发给其他小伙伴使用,但是其他小伙伴不一定安装有python.这时候就需要用到打包啦.打包可以将程序打包成exe文件.然后小伙伴在windows平台里就可以运行(无需python).直 ...

  9. python pyinstaller打包程序太大_Pyinstaller打包生成exe文件过大,四种常用处理方法集锦---嵌入式Python-02...

    上篇讲到 pyinstaller打包exe太大的问题 那既然pyinstaller这么麻(nan)烦(yong) 那为什么不找一种方法代替它呢? 经过多方面打听,一位道上的盆友告诉了我一个惊天大秘密 ...

最新文章

  1. 微信小程序验证车牌号(含新能源车牌)
  2. 北京/杭州 | 阿里巴巴达摩院自然语言智能生物医学团队招聘研究型实习生
  3. 短连接生成器——让你的url地址长度变短
  4. InstallShield 2020
  5. 细数那些年我用过的前端开发工具
  6. Linux 命令(12)—— wc 命令
  7. PHP常用时间函数总结
  8. java day32【HTML标签:表单标签 、CSS】
  9. 第三季-第3课-Coredump程序故障分析
  10. 电脑开机出现press f11 to start recovery system问题分析与解决
  11. JAVA工作流的优雅实现方式
  12. sublime中文乱码
  13. Bugly使用及APP版本更新
  14. MATLAB双目标定步骤
  15. 问题:控制台报错style-helper.mjs?d002:125 Uncaught (in promise) TypeError: Cannot read properties
  16. win7系统 邮箱服务器搭建,win7搭建邮箱服务器
  17. mysql group_concat去重_mysql GROUP_CONCAT 函数 将相同的键的多个单元格合并到一个单元格...
  18. UI设计—软件包装设计
  19. # Linkage Mapper 版本及下载
  20. 被骗几十万总结出来的Ddos攻击防护经验!(转载)

热门文章

  1. html5多个图片位置_Python使用标准库zipfile提取docx文档中所有图片
  2. 从自然科学基金项目申请看科学问题的凝练 (陈越 等)
  3. 表情包钢琴家安天旭来昆山春晚了
  4. 记一次 vivo x21 Android 8.1.1 调试Apk填坑
  5. Bad Request:Your browser sent a request that this server could not understand.
  6. 【云原生】Docker容器详细讲解
  7. 一行代码将Python程序转换为图形界面应用
  8. 集成学习-波士顿房价预测
  9. 京东 java 待遇_【深圳京东工资】java开发工程师待遇-看准网
  10. 详解诊断数据库ODX-F