[疑难] 简单的DWT程序,简单的问题

popop 2008-09-24
初学DWT,先写了一个Hello world:
module popop.dwt.window;

import dwt.DWT;
import dwt.widgets.Button;
import dwt.widgets.Display;
import dwt.widgets.Label;
import dwt.layout.FillLayout;
import dwt.layout.RowLayout;
import dwt.widgets.Shell;

void main ()
{
    Display display = new Display;
    Shell shell = new Shell(display);
    shell.setText = "Hello DWT World";
    shell.setLayout(new FillLayout());
    Label lable=new Label(shell, 0);
    lable.setText("hello");
    Button bt=new Button(shell, DWT.PUSH);
    bt.setText("This is a button");
    shell.open;
    while (!shell.isDisposed)
        if (!display.readAndDispatch)
            display.sleep;

    display.dispose;
}


Descent+DSSS环境下程序正常编译并运行,但是我有几个疑问:
1. 编译出来的程序(选项: -L/SUBSYSTEM:windows:5 -L/rc:dwt -O -release) 太大,为2,781,212  bytes,有些无法忍受,尤其因为它只是一个Hello world. 有什么好办法能减少它的体积?Poseidon比它还小,是怎么做的?
2. 缺少 shell.setLayout(new FillLayout()); 这一句的话,只能出一个空窗口,SWT似乎不会这样哦。
3. new Label(shell, 0).setText("Hello DWT World"); 会被编译器认为语法非法,个人认为D语言完全应该支持这种风格的。

如上,请圈友们讨论一下。
betty_betty2008 2008-09-25
第1点俺认为是静态链接造成的吧;
第2点:不使用Layout时需设定shell 的Size or Location:
shell.SetSize/shell.SetLocation;
第3点:D 支持如下语法:
(new Button(shell,DWT.PUSH)).setText("Push me");
popop 2008-09-25
第二三点很好的解释了问题,谢谢。

betty_betty2008 写道
第1点俺认为是静态链接造成的吧;


gcc里面的编译链接选项 -ffunction-sections -fdata-sections -Wl,--gc-sections可以有效去除静态链接库中没有被程序调用的“死代码”,极大缩减生成的二进制文件的尺寸,但愿DMD/tango也可以这样。
ideage 2008-09-28
我发现DMD1.032后的文件都比较大了.1.031的要小些.当然,我直接用Win32Api.
Global site tag (gtag.js) - Google Analytics