为什么delphi编译生成的exe文件这么大?
去掉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文件这么大?相关推荐
- 为什么delphi编译生成的exe文件这么大
delphi 编译生成的 exe 文件,占用磁盘字节数比较大的原因在于,delphi 编译的文件中包含有其他的数据信息更多. 以下在 delphi xe 10 中,建立一个只包含空窗体的工程,通过多种 ...
- 【问题解决】VS2019解决编译生成的exe文件打不开的情况
问题描述 本人是某计算机专业大学生,近期在用VS做大作业的时候,突然发现使用Release模式编译下的exe文件双击闪退.我在网上查了各种方法,也修改了相应的设置,但是仍然不管用. 解决方法 后来猛然 ...
- php编译减少大小,C++_减小VC6编译生成的exe文件的大小的方法,1、减小VC6编译生成的exe文件的 - phpStudy...
减小VC6编译生成的exe文件的大小的方法 1.减小VC6编译生成的exe文件的大小,最有效的方法就是: 步骤: 1.使用release版本 2.代码中增加:#pragma comment(linke ...
- VsCode终端无法运行编译生成的exe文件解决方法
#VsCode终端无法运行编译生成的exe文件解决方法 问题描述 g++编译生成exe文件,在默认终端中无法运行,包括直接运行test也不可 * 原因&解决方法 原因: 此时VsCode使用的 ...
- 解决pyinstaller打包exe文件过大(菜鸟一刀切傻办法)
pyinstaller打包exe文件过大 作为认真学习了Python两个多月的小白,觉得python还是有很多玄学,一直搞不懂明明一毛一样的步骤,为什么我用pyinstaller打包出来的exe有30 ...
- pyinstaller打包exe文件太大解决方法
pyinstaller打包exe文件太大的原因是把其它用不到的库也一起打包了,我的python用的Anoconda,本身带了很多库,代码打包后文件330MB,解决后只有29MB. 一.解决方法 解决方 ...
- Pyinstaller打包的exe文件过大的解决方法
Pyinstaller打包的exe文件过大怎么办? 相信经常用python的朋友都会面临这么一个问题,那就是想把自己写好的python程序打包给别人使用.有的人就会问了"打包"是什 ...
- 使用pipenv建立虚拟环境解决python打包exe文件过大的问题(附打包带图标,多个py文件打包exe)
我们编写的程序可以发给其他小伙伴使用,但是其他小伙伴不一定安装有python.这时候就需要用到打包啦.打包可以将程序打包成exe文件.然后小伙伴在windows平台里就可以运行(无需python).直 ...
- python pyinstaller打包程序太大_Pyinstaller打包生成exe文件过大,四种常用处理方法集锦---嵌入式Python-02...
上篇讲到 pyinstaller打包exe太大的问题 那既然pyinstaller这么麻(nan)烦(yong) 那为什么不找一种方法代替它呢? 经过多方面打听,一位道上的盆友告诉了我一个惊天大秘密 ...
最新文章
- 微信小程序验证车牌号(含新能源车牌)
- 北京/杭州 | 阿里巴巴达摩院自然语言智能生物医学团队招聘研究型实习生
- 短连接生成器——让你的url地址长度变短
- InstallShield 2020
- 细数那些年我用过的前端开发工具
- Linux 命令(12)—— wc 命令
- PHP常用时间函数总结
- java day32【HTML标签:表单标签 、CSS】
- 第三季-第3课-Coredump程序故障分析
- 电脑开机出现press f11 to start recovery system问题分析与解决
- JAVA工作流的优雅实现方式
- sublime中文乱码
- Bugly使用及APP版本更新
- MATLAB双目标定步骤
- 问题:控制台报错style-helper.mjs?d002:125 Uncaught (in promise) TypeError: Cannot read properties
- win7系统 邮箱服务器搭建,win7搭建邮箱服务器
- mysql group_concat去重_mysql GROUP_CONCAT 函数 将相同的键的多个单元格合并到一个单元格...
- UI设计—软件包装设计
- # Linkage Mapper 版本及下载
- 被骗几十万总结出来的Ddos攻击防护经验!(转载)
热门文章
- html5多个图片位置_Python使用标准库zipfile提取docx文档中所有图片
- 从自然科学基金项目申请看科学问题的凝练 (陈越 等)
- 表情包钢琴家安天旭来昆山春晚了
- 记一次 vivo x21 Android 8.1.1 调试Apk填坑
- Bad Request:Your browser sent a request that this server could not understand.
- 【云原生】Docker容器详细讲解
- 一行代码将Python程序转换为图形界面应用
- 集成学习-波士顿房价预测
- 京东 java 待遇_【深圳京东工资】java开发工程师待遇-看准网
- 详解诊断数据库ODX-F