C++ Builder编译的程序为什么那么大?/如何用API创建窗体?

Sachow 2000-06-07 04:06:00
为会么C++ Builder编译的程序总是很臃肿,比Delphi编译的要大一截?怎么能让它小
一点?
我用C++ Builder5编译了Charles Petzold的Hello.c源程序,体积竟然有50K! 用
Delphi编译的只有16K。
...全文
313 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
APIer 2000-07-18
  • 打赏
  • 举报
回复
SaChow兄:
其实BCB也能写出很小的程序的。选File->New->Console Wizard,出现对话框时,不要选Use VCL和Console Application.生成一个工程,然后在WinMain函数所在的文件中加入以下代码
#include <windows.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
//窗口函数说明
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

//初始化窗口类
//WinMain函数说明
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInst,
LPSTR lpszCmdLine,
int nCmdShow)
{
HWND hwnd ;
MSG Msg ;
WNDCLASSEX wndclass ;
char lpszClassName[] = "窗口"; //窗口类名
char lpszTitle[]= "窗口示例"; //窗口标题名

//窗口类的定义
wndclass.cbSize=sizeof(WNDCLASSEX);
wndclass.style = 0; //窗口类型为缺省类型
wndclass.lpfnWndProc = WndProc ; //窗口处理函数为WndProc
wndclass.cbClsExtra = 0 ; //窗口类无扩展
wndclass.cbWndExtra = 0 ; //窗口实例无扩展
wndclass.hInstance = hInstance ; //当前实例句柄
wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION) ;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); //窗口的最小化图标为缺省图标
wndclass.hCursor = LoadCursor( NULL, IDC_ARROW) ;
//窗口采用箭头光标
wndclass.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH) ;
//窗口背景为白色
wndclass.lpszMenuName = NULL ; //窗口中无菜单
wndclass.lpszClassName = lpszClassName ;
//窗口类名为"窗口示例"

//窗口类注册
if( !RegisterClassEx( &wndclass)) //如果注册失败则发出警告声音
{
MessageBeep(0) ;
return FALSE ;
}

//创建窗口
hwnd=CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,
lpszClassName,"英雄战机",
WS_OVERLAPPEDWINDOW|WS_VISIBLE,
0,0,
400,//GetSystemMetrics( SM_CXSCREEN ),
500,//GetSystemMetrics( SM_CYSCREEN ),
NULL,
(HMENU)NULL,
hInstance,
NULL);


//显示窗口
ShowWindow( hwnd, nCmdShow) ;

//绘制用户区
UpdateWindow(hwnd);

//消息循环
while( GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage( &Msg) ;
DispatchMessage( &Msg) ;
}

return Msg.wParam; //消息循环结束即程序终止时将信息返回系统
}

//窗口函数
LRESULT CALLBACK WndProc( HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch(message){
case WM_DESTROY:
PostQuitMessage(0); //调用PostQuitMessage发出WM_QUIT消息

default: //缺省时采用系统消息缺省处理函数
return DefWindowProc(hwnd,message,wParam,lParam);
}
return (0);
}

//------------------------------------------------------------------------这样生成的程序只有7K,把RTL和PACKAGES取消也只有50K,够小了吧?他是一个纯API的窗口程序。怎么样满意了吗?
欢迎来我的主页讨论C/C++程序相关的问题:
http://calfsoft.51.net
zf 2000-06-08
  • 打赏
  • 举报
回复
Because C++ Builder use use vcl and C++ at same time!
So Delphi application is smaller than C++ Builder!
Firing_Sky 2000-06-08
  • 打赏
  • 举报
回复
用API创建窗口,头文件不要包含VCL.h和forms.h
使用RUNTIME运行库
Sachow 2000-06-08
  • 打赏
  • 举报
回复
呵呵,我是喜欢程序体积小一点,以瘦为美,每每我看见那些只有百多K却功能不少的
程序时就赞叹不已,哎,可是……
还想问一个问题,C++ Builder能不能只编译某个C/C++源文件而不是一整个项目?如果
能的话,该怎么做?
还有,谁能给我一小段代码,不要VCL的支持,建立一个Window,或弹出一个对话框,
或播放一段声音,只要编译后体积在20K以内就行。我想对立使用BCB的信心,如果证实
它不能做,我只好……我只好……
alexela 2000-06-08
  • 打赏
  • 举报
回复
C++Builder的代码大是有他的原因的(因为有很多不用的DLL被连进去了)。但他并不影响速度和执行效率。BCB的编译器是优化编译器,C++编程的多态性决定了这一特点。虚拟函数的应用,为C++编程提供极大的方便(维护、升级、数据封装、继承。。。。。。)你的HELLO程序还算小的。如果你取消了DYNAMIC RTL和RUN TIME运行时库,程序至少达到900多K。一般都为1M以上。
随着你编程经验的增加,你会喜欢上他这一特点的。
halfdream 2000-06-07
  • 打赏
  • 举报
回复
呵呵, 再加代码上去,体积变化就不大了。
只用API只是创建的是WINDOWS, 而不能创建窗体FORM。
本书具有下面的一些特色: (1) 例程精练、实用、完整,易于查找本书的例程丰富,短小精练。在每章的前面部分,以一定的篇幅对基本理论、知识要点等进行论述;然后以经典的例程加以说明;最后对例程进行分析和总结。书中的例程完整,并全部按照章号进行了编号。在随书的光盘中有这些例程的源代码和编译、链接后的可执行文件。读者可以使用随书光盘中的“复制”程序(可执行文件为D5Samples.exe)将例程复制到硬盘的指定位置,也可以通过资源管理器进行复制。另外,对于每个例程都指定了若乾个关键字,可以根据关键字查找相关知识点的例程。 (2) 编程技巧丰富作者将自己在开发程序过程中总结、收集的经验和教训、一些读者在编程过程中遇到的问题等融合在本书中,并且将这些编程技巧尽量独立,便于读者快速查找。 (3) 内容广泛,兼容性强本书几乎涉及了C++Builder编程的所有领域,不仅适用于C++Builder 5,而且也适用于C++Builder 4和C++Builder 3等以前的版本。 (4) 体现了面向对象的技术和软件工程化的思想本书从总体上体现了面向对象程序设计的方法,同时将软件工程化的思想融于其中。 内容编排本书主要分为下面的六个部分: 第一部分 C++Builder编程基础 C++ Builder编程基础包括:C++Builder集成开发环境的介绍和C++语言的关键技术。 第二部分 C++Builder编程通用技术 C++ Builder编程核心技能包括:窗体和组件、菜单、工具栏和状态栏、键盘和鼠标、文件、目录和驱动器以及打印等。 第三部分 C++Builder高级编程技术 C++Builder 高级编程技术包括:数据共享、操作注册表、帮助系统的制作、安装与卸载、多线程应用程序、动态链接库和图形与多媒体等技术。 第四部分 数据库编程数据库编程部分包括:关系数据库、数据库组件、InterBase服务器、OLE DB/ADO和Web与数据库等。 第五部分 组件对象模型(COM) 组件对象模型(COM)包括:COM和OLE自动化等内容。 第六部分 分布式程序设计分布式程序设计包括:DCOM、MIDAS、ActiveForm、CORBA与分布式应用程序,以及其他的一些编程方法与技巧。 阅读建议: 对于C++Builder的初学者,可以按顺序进行阅读。如果读者对C++语言有一定的了解,也可以直接从第二部分开始,待使用C++Builder编程有了一定的经验后,再回过头来看看第一部分的内容。对于C++Builder的中级用户,可以按章节顺序阅读、上机,也可以直接挑选感兴趣的章节学习。值得注意的是,第一部分的内容对使用C++语言进行软件开发非常有用,一定要掌握好。对于C++Builder的高级用户,可以直接挑选感兴趣的章节阅读。
本书特色 本书具有下面的一些特色: (1) 例程精练、实用、完整,易于查找本书的例程丰富,短小精练。在每章的前面部分,以一定的篇幅对基本理论、知识要点等进行论述;然后以经典的例程加以说明;最后对例程进行分析和总结。书中的例程完整,并全部按照章号进行了编号。在随书的光盘中有这些例程的源代码和编译、链接后的可执行文件。读者可以使用随书光盘中的“复制”程序(可执行文件为D5Samples.exe)将例程复制到硬盘的指定位置,也可以通过资源管理器进行复制。另外,对于每个例程都指定了若乾个关键字,可以根据关键字查找相关知识点的例程。 (2) 编程技巧丰富作者将自己在开发程序过程中总结、收集的经验和教训、一些读者在编程过程中遇到的问题等融合在本书中,并且将这些编程技巧尽量独立,便于读者快速查找。 (3) 内容广泛,兼容性强本书几乎涉及了C++Builder编程的所有领域,不仅适用于C++Builder 5,而且也适用于C++Builder 4和C++Builder 3等以前的版本。 (4) 体现了面向对象的技术和软件工程化的思想本书从总体上体现了面向对象程序设计的方法,同时将软件工程化的思想融于其中。 内容编排本书主要分为下面的六个部分: 第一部分 C++Builder编程基础 C++ Builder编程基础包括:C++Builder集成开发环境的介绍和C++语言的关键技术。 第二部分 C++Builder编程通用技术 C++ Builder编程核心技能包括:窗体和组件、菜单、工具栏和状态栏、键盘和鼠标、文件、目录和驱动器以及打印等。 第三部分 C++Builder高级编程技术 C++Builder 高级编程技术包括:数据共享、操作注册表、帮助系统的制作、安装与卸载、多线程应用程序、动态链接库和图形与多媒体等技术。 第四部分 数据库编程数据库编程部分包括:关系数据库、数据库组件、InterBase服务器、OLE DB/ADO和Web与数据库等。 第五部分 组件对象模型(COM) 组件对象模型(COM)包括:COM和OLE自动化等内容。 第六部分 分布式程序设计分布式程序设计包括:DCOM、MIDAS、ActiveForm、CORBA与分布式应用程序,以及其他的一些编程方法与技巧。 阅读建议: 对于C++Builder的初学者,可以按顺序进行阅读。如果读者对C++语言有一定的了解,也可以直接从第二部分开始,待使用C++Builder编程有了一定的经验后,再回过头来看看第一部分的内容。对于C++Builder的中级用户,可以按章节顺序阅读、上机,也可以直接挑选感兴趣的章节学习。值得注意的是,第一部分的内容对使用C++语言进行软件开发非常有用,一定要掌握好。对于C++Builder的高级用户,可以直接挑选感兴趣的章节阅读。

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧