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

Sachow 2000-06-07 04:06:00
为会么C++ Builder编译的程序总是很臃肿,比Delphi编译的要大一截?怎么能让它小
一点?
我用C++ Builder5编译了Charles Petzold的Hello.c源程序,体积竟然有50K! 用
Delphi编译的只有16K。
...全文
309 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,221

社区成员

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

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