整整一年前,我在bcb论坛贴过一个帖子《为什么这么多人总发现了一个bug?》
当时的帖子很热烈,现在我觉这里也需要贴一下了。大家感兴趣的搜索以下论坛,会发现很多关于Delphi Bug 的帖子,仔细看过帖子,可以说其中绝大部分都不是什么bug。相对于VC,VB的论坛,没有人会这么说,他们都是说 为什么是 xxx 这样?而borland的用户,却总说“发现一个bug xxx”这类的话,为什么?首先,说这类话我可以说,十之八九都是初学者,但是又有一点的经验,反映出一种浮躁的情绪,让我想起儿时课文《石钟山记》记中说的“乱石中择其一二,扣之空空焉,自以为得其是”;
其次,这表现出他们对boland产品的信心不足;大家作何感想?

解决方案 »

  1.   

    用的多才会发现BUG,他们觉得Delphi应该这样才对,但是Delphi没有这样做,所以不习惯;VC里人们不知道VC应该是什么样子,所以看见的都以为是对的。
      

  2.   

    同意楼主,我以前也发现过很多bcb的bug,到现在,这些bug都一个一个解决了
    不过bug还是有存在的,比如ado 2.0以前的版本,老就出现EOF和BOF的错误,升级ado就没事了,这是一个实实在在存在的bug
      

  3.   

    是也,非也?
    就像生活中一样,不要把眼光总停留在别人的缺点或我认为是别人的缺点的层面上
    其实每个人都有自己的优点,就像软件,如果一条路走不通(可能就是不通,也可能是你不会走),总还有其他的方法可以达到自己的目的。
    本人初学时是从项目入手,没经过系统的学习,也提出过问题,比如duduwolf(嘟嘟狼) 说的问题,但只以为是自己水平不行,根本就没想到是BUG,在网上查一查才知道原因。还是老话,谦虚使人进步!
      

  4.   

    有時, 這個 反映了一個思維的問題, 如果是一個borland的bug, 那更多的時候, 是期待由borland 出補包來解決; 第二, 那麼, 這個錯不是我的錯了, 不是我的無能了, 而是borland的錯了, 我可以放棄了!!
      

  5.   

    同意
    -------------------------------------------------------------------------------
     回复人: eastliangliang(青苹果)(学而不思则惘) ( ) 信誉:137  2003-10-30 08:24:00  得分:0 
     
     
      用的多才会发现BUG,他们觉得Delphi应该这样才对,但是Delphi没有这样做,所以不习惯;VC里人们不知道VC应该是什么样子,所以看见的都以为是对的。
    -------------------------------------------------------------------------------支持!
      
     
      

  6.   

    其实就那几个BUG,有的BUG不做都接触不到.说有就好,说没有就没有,如果真有,不会绕开吗?
    耙子的话题,有意思!
      

  7.   

    嘿嘿
    BUG还是有的,只是没有有些人想的那么多、那么容易出现罢了我遇见过一个
    用 CTRL+SPEACE 代码导航的时候,
    有时只要导航的是True,就会出一个index out of list的错误
    这时我必须重新启动启动delphi,否则这个错误会一直出现
    不知这是一个BUG,还是我的系统的问题程序调不通的时候,说是有BUG的人,十个有九个是自己的错误
      

  8.   

    同意:
    >程序调不通的时候,说是有BUG的人,十个有九个是自己的错误
      

  9.   

    昨天碰上的,兄弟们看看算不算bug,顺便解答一下:)
    http://expert.csdn.net/Expert/topic/2408/2408069.xml?temp=.8710749
      

  10.   

    用的多才会发现BUG,他们觉得Delphi应该这样才对,但是Delphi没有这样做,所以不习惯。
    程序调不通的时候,说是有BUG的人,十个有九个是自己的错误都很有见解啊!
      

  11.   

    说是有BUG的人 多半是半天调式不好就着急了,然后就冒火了  呵呵
      

  12.   

    我的Explorer中的树型列表有时怎么也出不来,碰到了几次,必须关闭重新打开d,是什么问题?没有调试程序,就在写程序时候出现的,用的是正版的。
      

  13.   

    不过偶到是曾经发现个BUG当使用TACTIONBAR系列控件的时候是不可以制作MDI程序的!
      

  14.   

    当使用TACTIONBAR系列控件的时候是不可以制作MDI程序的!
    ////
    这也叫Bug?
      

  15.   

    所谓亲和度和bug是要分开来讲的!
      

  16.   

    哦,这不叫Bug,这叫Super Bug!你自己可以去www.blong.com上看看....
      

  17.   

    borland 的新闻组讨论过。
    我曾经和cker也琢磨过TACTIONBAR。基本意见就是他们不适合传统的MDI窗口开发,因为大家认为他没了右边的ICON,
    认为是bug的一派,在发现D7仍是如此的时候也无话可说,因为如果是bug,borland不可能不修改了。
    继Office 2000以后,office 不再采用原来的MDI,而是采用2000和xp开始支持的MTI窗口,
    Frontpage 虽然仍是MDI,但是他也一样没有了右上角的的ICON了
      

  18.   

    精明的编程者听说了此道,并遵循它;平庸的编程者听说了此道,并寻觅它;愚蠢的编程者听说了此道,却嘲笑它。  要不是因为有嘲笑,道也就不复存在了。  最高的声音最难被听见。前进也是一种倒退。大器晚成。即使是一个完美的程序也仍然会有隐患。  道深藏不露,难于理解。
    阿嚏,阿嚏,谁骂我。嘿嘿,我才不在乎bug呢。
      

  19.   

    好像很少听见高手说到BUG
    不知道为什么
    好像他们都能解决!
      

  20.   

    Delphi最著名Bug就是D5的ADO了, 
    D6没用过
    D7的dbExpress For MSSQL 的驱动, 这么明显的Bug, 难道宝兰没有测试人员,  或者都忙着向.net进军了,又出现他妈两个C++的变种开发工具, 有这个精力还不如好好改善一下Delphi的开发环境,  或者对C++ Builder 进行换血, 重振BC的往日雄风,  他妈的, 宝兰的领导层简直是白痴!
      

  21.   

    数上滴你说的这两个的确是BUG,8过BORLAND都是第一时间就推出补丁了(至少当我发现这两个BUG后,上BORLAND网站时已经有相应的补丁可下了),你自己没补表乱骂。
      

  22.   

    为什么D7的编辑器有时会出现乱码,  
    为什么D7的在编辑(非执行时)会莫名其妙的退出
    为什么ActionManager这些东西Bug一大堆(DevExpress的就不会)
      

  23.   

    各位首先声明, 认识我的人都知道我是Delphi忠实拥护者, 
    我不是想怎么样, 只是这几年的Dephi的表现实在是太让人失望了, 我是恨铁不成钢啊!
    如果Delphi的开发环境做得再人性化一点,    说个笑话, 你用SQLConnection连接数据, 有用ADO连接的爽吗,   再看看他妈的在设置数据库密码连个 * 都没有
      

  24.   

    D5的BUG还算好的,你们没见过D4,那才是BUG满天飞。妈的,两个overload的函数都不能编译通过,才叫晕。
    D6的BUG也多,QDocuments之所以无法推出D6的版本,就是因为OTA上BUG太多,无法处理KeyBindings。狂郁闷。
      

  25.   

    >为什么D7的编辑器有时会出现乱码,  
    >为什么D7的在编辑(非执行时)会莫名其妙的退出这两个从来没碰到过。SQLConnection还好,习惯了就好chechy说的是D4是BUG最多的一个版本,用过的人没有不骂的。个人认为D3和D5是最好的两个版本(D5的ADO BUG其实不是BUG,而是MS在ADO2。6中改了一些东东,所以D5的ADO就出错了,如果用ADO2。5或之前的版本,D5是没有问题的)
      

  26.   

    D3 引入了 Code Insight这是一个重大的改进,
    D5 引入了ADO,完善了MIDAS这也是很好的进步,
    D4 开始增加了 DBX,我非常喜欢。可能论坛里面没几个人是从D1开始用到D7的,D1是for win16的,我当时正在学OWL,看到delphi吃惊非小!Delphi bug的确有,很现在论坛里面很多嚷嚷的都不是borland的错,记得D3当时和S3现实卡还冲突,和Win95 OEM 版的ComCtl32.dll 也冲突,这都不能怪,borland,因为ms在D3之后改了东西。同样D5的ADO的问题,也是正如 猛禽 所说的,怪不得borland.dbx 密码没有用*,我觉得这是习惯问题,试想弄成*号这不是举手之劳?IBX也不是*,呵呵 ;)
      

  27.   

    >D4 开始增加了 DBX,我非常喜欢。这个是D6吧:)偶收藏了从D1到D7,不过是从D2开始用滴。
      

  28.   

    什么叫举手之劳,单是从这点细节就可以看出一个公司的是否真正站在用户的角度的去做产品, 也许他认为他要实现的功能达到了,但他没有考虑用户的操作的易用性, 为什么Linux叫好不叫座,  这就是它致命的缺点,最终它也只能是自诩为高手的高手们手中的玩具,让他们孤芳自赏去吧,市场能证明一切
      

  29.   

    是borland翻译成宝兰吗?怎么感觉那么别扭。
      

  30.   

    >>为什么D7的编辑器有时会出现乱码,  
    >>为什么D7的在编辑(非执行时)会莫名其妙的退出
    證實, 以上兩個問題我都碰過!!>> 再看看他妈的在设置数据库密码连个 * 都没有
    同意...
      

  31.   

    D7的编辑器有时会出现乱码??
    **是不 PAS文件本身就是乱码,用文本编辑器看看?
      没有碰到过乱码的。
    D7的在编辑(非执行时)会莫名其妙的退出
    **碰到了,原因不知,只知道重装一下又可以了。
    D5中的ADO有问题
    **好像有问题,听说有补丁,不过D6、D7中是肯定没有问题的。我碰到过很多所谓的BUG基本很多是程序代码本身的问题或者是
    重装就能解决的。
      

  32.   

    code insight功能虽然不错,但是我觉得最好的还是Ctrl+Shift+C这个功能,当初用D3编上万行程序,那个痛苦啊,什么都得自己敲。D4其实改进的东西很多,但是,太TMD的不稳定了,光补丁包就出了3个,那个BUG多啊,多得让人难以想象。
    而且从D4开始,Delphi的启动速度慢了许多,俺很崇拜的雅典娜女神也没了(4就若隐若现了),同时有了按了F9,发现Delphi没了。另外,Delphi有个BUG,可能从4-7都没有解决。就是TreeView在发生Dock后,每个TreeNode所关联的Data,内容发现丢失,访问的时候居然出现AV错误。
      

  33.   

    我96年接触D1的,到现在已经有7个年头了。虽然说编写项目从D3开始,到D5收手。但是每个版本都玩过。其中D3-D6玩的还都是正版。
      

  34.   

    to :chechy(www.qdocuments.net) 
      你说的是Dock 还是Drag,   Drag好像不会啊
      

  35.   

    我是用的Dock,Drag我倒没有试过。这个我分得清,当初用D4写了一个很牛的Drag程序,晕死周围一片人。
      

  36.   

    我试过不会, 开发环境win200, D7
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, ComCtrls;type
      TForm1 = class(TForm)
        TreeView1: TTreeView;
        Panel1: TPanel;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    type
      PD = ^TD;
      TD = record
        A: Integer;
        B: array [0..10] of char;
      end;procedure TForm1.Button1Click(Sender: TObject);
    var
      p: PD;
    begin
      p := PD(TreeView1.Items.Item[0].Data);
      ShowMessage(IntToStr(p.A) + #9 + p.B);
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      p: PD;
    begin
      Panel1.DockSite := True;
      TreeView1.DragKind := dkDock;
      TreeView1.DragMode := dmAutomatic;  TreeView1.Items.AddChild(nil, 'aaa');
      TreeView1.Items.AddChild(nil, 'bbbb');
      TreeView1.Items.AddChild(nil, 'bbbb');
      New(p);
      p.A := 10;
      p.B := 'abcd';
      TreeView1.Items.Item[0].Data := p;
    end;end.
      

  37.   

    To DWGZ:
    1)我写Tree,Data关联的都是Class,而不是Record。
    2)我是在Class中保存了TreeNode的值,然后Dock后,在调用TreeNode,就出现AV错误。
    3)这个错误,我在D4的时候发现。D5/D6都验证了这个BUG继续存在。D7我没有验证过。不过,这个似乎不是Borland的BUG,但是这个BUG确实很让人讨厌。我不得不在每次Dock后,重新给每个Data中的TreeNode重新赋值。
    我前面的描述可能有些失误。
      

  38.   

    可能D7以下会吧,  我在D7下试过class也不会
      

  39.   

    试试这个代码,是否出错?
    type
      PD = ^TD;
      TD = record
        A: Integer;
        B: array [0..10] of char;
        C: TTreeNode;
      end;procedure TForm1.Button1Click(Sender: TObject);
    var
      p: PD;
    begin
      p := PD(TreeView1.Items.Item[0].Data);
      ShowMessage(p^.C.Text);
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      p: PD;
    begin
      Panel1.DockSite := True;
      TreeView1.DragKind := dkDock;
      TreeView1.DragMode := dmAutomatic;  TreeView1.Items.AddChild(nil, 'aaa');
      TreeView1.Items.AddChild(nil, 'bbbb');
      TreeView1.Items.AddChild(nil, 'bbbb');
      New(p);
      p.A := 10;
      p.B := 'abcd';
      p.C := TreeView1.Items[0].
      TreeView1.Items.Item[0].Data := p;
    end;
      

  40.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, ComCtrls;type
      TForm1 = class(TForm)
        TreeView1: TTreeView;
        Panel1: TPanel;
        Button1: TButton;
        ListBox1: TListBox;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure TreeView1EndDock(Sender, Target: TObject; X, Y: Integer);
      private
        procedure ShowAddress(o: TObject);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    type
      PD = ^TD;
      TD = record
        A: Integer;
        B: array [0..10] of char;
        C: TTreeNode;
      end;procedure TForm1.Button1Click(Sender: TObject);
    var
      p: PD;
    begin
      p := PD(TreeView1.Items.Item[0].Data);
      ShowMessage(p^.C.Text);
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      p: PD;
      t: TTreeNode;
    begin
      Panel1.DockSite := True;
      TreeView1.DragKind := dkDock;
      TreeView1.DragMode := dmAutomatic;  TreeView1.Items.AddChild(nil, 'aaa');
      TreeView1.Items.AddChild(nil, 'bbbb');
      TreeView1.Items.AddChild(nil, 'bbbb');
      p := New(PD);
      p.A := 10;
      p.B := 'abcd';
      p.C := TreeView1.Items.Item[0];
      TreeView1.Items.Item[0].Data := p;  ShowAddress(TreeView1);
      ShowAddress(TreeView1.Items.Item[0]);
      ShowAddress(TreeView1.Items.Item[0].Data);
    end;procedure TForm1.ShowAddress(o: TObject);
    begin
      ListBox1.Items.Add(IntToStr(Integer(o)));
    end;procedure TForm1.TreeView1EndDock(Sender, Target: TObject; X, Y: Integer);
    begin
      ShowAddress(TreeView1);   //这个不变
      ShowAddress(TreeView1.Items.Item[0]); //这个变
      ShowAddress(TreeView1.Items.Item[0].Data);   //这个变
    end;end.
    这应该不算不Bug吧
      

  41.   

    Dock之后发生改变,Help说了吗?没说难道还不是Bug?
    按照正常的思维,TReenode的地址应该是不变的,对不?
      

  42.   

    嘿嘿这么说的话,这个不知道算不算在DBGIRD里设置Picklist,在两个字段里设置,会跑到一起,NND,很烦人的说不过D7好像改过来了
      

  43.   

    ActionManager这些东西Bug一大堆!   真他妈的不好用! 而且还不支持继承!
      

  44.   

    讨论的真热烈啊,我也说一个,notebook拷贝粘贴控件时老是换层,应该是bug吧。
      

  45.   

    呵呵,我用DELPHI用到现在,如果有BUG的话,上网站下载补丁应该都能解决掉了,如果还有BUG的话,也是我没有发现过的了。。
      

  46.   

    看大家找了这么多BUG,偶也来指出一个,8过是BCB滴,不是DELPHI滴在BCB中创建DLL,选择支持VCL的话,会有内存泄露,虽然只有一K,但肯定是BUG。因为我试过即使在这个DLL里写一个什么都不干的函数,然后启用CODEGUARD,调用返回后,CG即报MEM LEAK。改用不支持VCL的话,就不会了。
      

  47.   

    Delphi的程序具有一种不稳定性。比如,大量的操作string类型,在使用时候会莫名其妙的出现AV错误。而你把string改为ShortString(可能是用{$H-}吧),那么AV错误就会自动消失,这个好像是D3,D4都有这个问题。
    此外,Delphi也是在不断发现BUG的基础上发展的。比如D4的时候MIDAS解析表名,统统改为大写,结果dbo就变成了DBO,呵呵数据库可没有DBO这个用户,结果报错。到了D5,明显修正了这个错误,给Provider提供了一个OnGetTableName的事件,这样,就防止了表名解析错误带来的麻烦。
    Delphi的一些BUG不是说打了的补丁就能解决的,有些BUG甚至下个版本都无法解决。
      

  48.   

    这样好不好,  如果哪位能每说出一个Bug, 给他100 分, 分我是没有(我现在只有40分), 由各位大款自愿捐助, 哪位愿意参加
      

  49.   

    我把我40捐出来, 各位,  都捐点吧, 不限多少, 只为咱们的Delphi争口气
      

  50.   

    嘿嘿,DWGZ:要是这样的话,偶支持还有4000来分,捐也捐不出去,散也散不完
    不如干点好玩的,嘿嘿
      

  51.   

    強烈支持: DWGZ(我不要分, 我讨厌分,谁给我分我跟他急) ;
    昨天測試一個網友的代碼, 有問題, 那位能說說是什麼回事!!
    d7 + win2K; delphi自己幫助的代碼!!uses SysUtils;
    const
      S: PChar = 'A fUnNy StRiNg'
    begin
      Canvas.TextOut(5, 10, string(StrLower(S)) + ' ' +   string(StrUpper(S)));
    end;
      

  52.   

    呵呵,好象现在这里的人气旺呀。。
    还有,现在CSDN的星星可真的多呀!
      

  53.   

    真是的,  这还是Delphi帮助里面的例子, 
    我用UpperCase就不会,  大家认为算不算
      Canvas.TextOut(5, 10, string(LowerCase(S)) + ' ' +   string(UpperCase(S)));
      

  54.   

    Delphi的BUG很多的,只不过有些我们无法碰到。
    比如,我在开发QDocuments的时候,就发现,在D6,只要Add一个KeyBinding,在D6退出的时候,有时就会引发AV错误。如果去掉AddKeyBinding的代码,AV错误就消失了。
    这个BUG被GExperts的作者证实了,在他的网站上就有这个东西:
    Known bugs in the Delphi 6 Open Tools API (some apply to Delphi/BCB 5):
    TIModuleInterface.GetFormInterface is deprecated and always returns nil. You must use IOTAFormEditor instead. 
    The Open Tools keybinding interfaces sometimes raise AVs when using IOTAKeyBoardServices.AddKeyboardBinding. 
    IOTAEditView.PosToCharPos raises an AV in dfwedit.dll every time it is used. 
    IOTAEditorServices.TopView raises an AV in the coride package if called with no files open. 我就奇怪,这个牛人写的GExperts视如何避免的,我研究了半天源码都没有研究出来。
      

  55.   

    还有一个很有趣的BUG,就是,写Open Tools  API,你在最初给菜单指定的快捷键根本视无效的。
    解决的方法1)在点击菜单的时候,重新设置一下。2)加一个Timer,毛估估几秒后启动一把,重新设置快捷键,这样就可以回避这个BUG。
    这招,俺就是从GExperts中学到的。
      

  56.   

    俺已经半年没有碰过delphi了,呵呵!
    也许我对它了解不够,但的确是比较多的。不过和CB相比,delphi是好了许多!
    另外,帮助里有的代码有问题我也发现过多次
      

  57.   


    支持DWGZ,呵呵500年的朋友嘛。
      

  58.   

    D7的编辑器有时会出现乱码 这我碰到过有时候用中文作注释会有 一些 其实也算不得bug 很多东西对中文敏感特别是InstallShield 即使打上东方语言包也是bug 满天飞
      

  59.   

    warton 说到delphi 的帮助我想大多数人会深有感触DWGZ 怎么捐法?
      

  60.   

    怎么大家都还没有说BDE的那个著名的bug啊,呵呵,可能是大家早不用BDE了吧
      

  61.   

    aiirii:
    你的问题在大富翁上有过详细的讨论。S:= 'A fUnNy StRiNg'; 
    这句话的含义是: 
    把一个字符串常量'A fUnNy StRiNg'的地址赋给S。 
    这里这个字符串常量不是动态分配给S的,而是在程序 
    启动的时候在堆栈中预先分配好的,所以说是个字符串 
    常量。这个常量的定义跟你定义S为变量还是常量没有 
    关系。 而StrLower函数需要对传入的字符串直接做修改,(由于不能对常量进行修改),所以会报错。
      

  62.   

    DELPHI的帮助里的代码经常有错,偶一向对这些代码持仅供参考的态度。帮助本身的链接有时也有错。真要说到BUG,DELPHI中BUG的最多的技术除了OTA以外,就要算WEBSNAP了,不计其数:
    前一段用D7做过几个WEBSNAP应用,最常见的问题就是LOGIN,经常LOGIN不进去,有时用WAD是好的,改DSO/ISAPI就不行,要不就是LOGIN进去后又出不来(在DR‘BOB上找到其中一个问题的解决办法,但还是没能完全解决)。还有就是LINKTOPAGE有一个很大的BUG:就是那个ERROR页面根本到不了,而这个在D6中却是正常的。FT还有COM方面有些小BUG,最有名的就要算F1BOOK了,在D6中导入F1BOOK6。1的TLB会丢失很多东东,结果不能用,还要自己手工加入才行,而用D5导入则没有问题。套一句九斤老太的名言:“一代不如一代啊”
      

  63.   

    最早用的是 Delphi4,现在用Delphi7,但是公司开发不用Delphi,用MS.NET,Delphi现在只是个人爱好了。
    我知道的BUG就是ADO的那个,一段时间折腾了我够呛。不过我觉得Delphi的BUG和Windows的PACK相比,还是差了很多的。
      

  64.   

    BDE的BUG不提也罢,已经没有人用了,N年前我就改过其中一个ODBC的BUG,不过那时BORLAND已经没有再改进BDE,所以那个BUG一直到现在还存在,具体可以看我主页上两年前的一篇文章。我还碰到过BDE的一些比较BT的BUG(在D4里,之后没再用过BDE,就不知道了),用BDE连接IB有时访问浮点数,返回会变成整数,FT
      

  65.   

    人气好旺啊~~~~~~~~~~~~!
    ------------------------
    偶也提个D7+sql2k问题:
      点开ADODataSet.CommandText时,左边有数据表,底下是字段,
      在点击添加数据表时,不能自动添加用户登陆名,因为没有用户登陆名,打开出错!
    不知这个功能不全算不算BUG?
      

  66.   

    观察StrUpper与UpperCase的源码可以看出来, 但它的帮助上的例子居然这样写, 应该也算一个Bug了
      

  67.   

    to:  XXSingle(专程赶来学网络);
      这个其实也不能算是Bug, 并不是所有的数据库都有支持用户,  这只能说是Delphi做的不够人性化而已,  不过好像C# 可以自动产生吧记不得了
      

  68.   

    Delphi的帮助烂,那是地球人都知道的。看帮助还是MSDN。Delphi的帮助有些正确的,有些错误的。当初看Help,还发现有缺字的,做文档的水平也太差了。
      

  69.   

    上回看过一个帖子,这个 BUG 实在太不应该了。procedure TForm1.Button1Click(Sender: TObject);
    var
      s1,s2,s3:WideString;
    begin
      s2:='';
      s3:='';
      s1:='Hello';
      s1:=s2+s3;
      ShowMessage(s1);  // s1 还是 “Hello”
    end;
      

  70.   

    呵呵,这应该是一个bug吧,
    lea eax [ebp-$08] //s2=''
    call @WStrClrlea eax [ebp-$0c] //s3=''
    call @WStrClrlea eax [ebp-$04] //s1='hello'
    mov edx $004521d0   //$004521d0应该就是‘hello’吧
    call @WStrLAsg
    //s1=s2+s3
    lea eax [ebp-$04] //这里就是s1的地址
    mov ecx [ebp-$0c] //s3
    mov ecx [ebp-$08] //s2
    call @WstrCat3  //问题就应该出在这个子程序里吧 ,谁给我讲讲,我迷糊了,呵呵
      

  71.   

    s1 := s2 + s3 + 'aa'//结果是aalisten
      

  72.   

    另外,hiflower(花)说: 它判断两个字符串长度都是 0 时, 就返回了,好象不正确
    把它改成  s1 := '' + ''; 当然我这是固定常量
    结果是 '';
      

  73.   

    不对,我这样赋值, 它直接@WstrClr, 问题就出在@WstrCat3 上了
      

  74.   

    给delphi找BUG啊?晕哦,不过,delphi确实有BUG,楼上大家的发言我都看过,不少BUG我遇过,不过,还是通过下补丁或是其他方法解决了.有时间,还是做点实事吧,忙都忙晕呢,只要Delphi不崩溃我就谢天谢地了!
      

  75.   

    学习!支持DWGZ(我不要分, 我讨厌分,谁给我分我跟他急)的方法。
    捐分是好方法。
    我有几十分,
    愿意全部捐出,
    捐向哪位?
      

  76.   

    可用分少的就算了,  我觉得第一位应该是 hiflower(花) ,哪位比较富有的愿意捐出,  当场开贴,  不能让人说咱们不讲信用,   另外讨论这么久也没发现什么Bug呀
      

  77.   

    to windindance(风舞轻扬) and All:
    >> S:= 'A fUnNy StRiNg'; 
    >>把一个字符串常量'A fUnNy StRiNg'的地址赋给S。 
    >>所以说是个字符串 
    >>常量。这个常量的定义跟你定义S为变量还是常量没有关系。 
     我还不是很明白, 那你说, 能解决这个问题吗, 我的意思是用 StrLower(S) 能避免AV错吗??如何才是正确的使用方法??
      
     
      

  78.   

    to: aiirii(ari) 
    我想下面的例子能够解答你的问题procedure TForm1.Button1Click(Sender: TObject);
    var
      P1, P2: PChar;
    begin
      case RadioGroup1.ItemIndex of
        0:
          begin
            P1 := 'Hello';  //字符串常量, 将出错
          end;
        1:
          begin
            P1 := StrAlloc(10 * SizeOf(Char));
            StrPCopy(P1, 'Hello');
          end;
      end;
      P2 := StrNew(P1);
      P2 := StrUpper(P1);
      ShowMessage(P2);
    end;
      

  79.   

    很多情况下Bug可以自己解决的
      

  80.   

    Bug不可能没有,解决好就是经验,要不怎么会有经验丰富的人
      

  81.   

    同意海天子。对了,上面我提到的 BUG 可以这样绕开,不过这也太可笑了点吧s1:=WideString(s2+s3); 或 
    s1:=s2+s3+'';
      

  82.   

    我也来说个Bug
    procedure TForm1.Button1Click(Sender: TObject);
    const
      I: Integer;
    begin
      Inc(I); //居然可以改
      ShowMessage(IntToStr(I));
    end;
      

  83.   

    楼上的, 不知道别乱说
    The $J directive controls whether typed constants can be modified or not. In the {$J+} state, typed constants can be modified, and are in essence initialized variables. In the {$J-} state, typed constants are truly constant, and any attempt to modify a typed constant causes the compiler to report an error.
      

  84.   

    To:maskedman(蒙面人) ,你的那个:
    procedure TForm1.Button1Click(Sender: TObject);
    const
      I: Integer;
    begin
      Inc(I); //居然可以改
      ShowMessage(IntToStr(I));
    end;
    编译能通过吗? 不懂就别乱说,好好学吧
      

  85.   

    關于 StrUpper 問題討論給分貼:
    http://expert.csdn.net/Expert/topic/2439/2439703.xml?temp=.6849939
      

  86.   

    kaiyun97() 说得也不对, 
    他可能是写错了
    const
      I: Integer = 某个值;不过他的可以在D5下通过, 因为D5 缺省是 {$J+}, D7缺省是{$J-}