有一点忘了说了,把Classes.pas加到你的Project里,可以对他也进行调试,我遇到的情况是在SetSize函数内部数据是正确的,但出来后就成了0。

解决方案 »

  1.   

    不解,研究中。。
    Delphi可以输入中文注释
      

  2.   

    已经看过有人提出过类似的问题了.这是IDE的一个Bug
      

  3.   

    我上次用FileStream时已经出过这个问题了,现在TStream.Size不能用了。不知什么原因。
      

  4.   

    不会的,我跟进去看了看,是5不是0,包括后来的label.caption,都是5
    另外,Delphi里的注释当然可以写汉语了,如果你那里有问题,看看是不是字体设置的不对
      

  5.   

    我试过了,b.Size=5没有问题.不过我以前遇到过类似的问题,是因为被优化了,你把优化关掉,再Build一次再跟踪试一试.
      

  6.   

    你设置完断点跟进去后,选中b.Size,按Ctrl+F7,看看值是多少
      

  7.   

    ^^^^^^^^^^^^^^^^^^^
    我也出现过这样的问题:你应该注意到在下列语句前会没有一个小经、绿点的,
      i:=b.Size;Delphi 根本没有对它进行编译!!!!!!!!!!!!!!!
    可能是优化的原因吧!你就麻烦一点多写几句!!!
    ^^^^^^^^^^^^^^^^^^^^^^^^^Delphi是可以用汉语注释的
    ^^^^^^^^^^^
      

  8.   

    原来Delphi和C++Builder一样,Bug无穷无尽啊!
    伟大的发现!
    比我上次发现的
    "
    哈哈哈!无意中的发现,CString 有GetLength(),竟没有SetLength(),MFC的功能实在是太强大了.(
    "
    还要伟大!
      

  9.   

    :)DELPHI所有的流的SIZE都有点问题,很容易出错,
      

  10.   

    内存没有看到的结束标志你没搞对
    Label1.Caption:=IntToStr(b.Size);没错就可以了
    而且分配内存也不用d.size
      

  11.   

    这确实好像是Delphi的一个 BUG,但是有的时候他是正确的呀。
      

  12.   

    多谢大家的参与,但问题并没有解决,原因没有找到,答案没出现。我先回答一下大家的建议吧。to Bob7946(X度空间):里面数据确实是对的,Captin的值也是对的,但你有没有看看在IDE里Size的值啊?  另外我在Delphi6里无论用什么输入法都不能输入中文,会听到只读文本框的嘟嘟声,不过可以粘贴。
       CTRL+F7?那不是Evaluate/Modify窗口吗?不过还是0。to plainsong(轻风):无论开不开优化,都是一样的现象。to shuixin13(心帆):你有没有调试我的代码啊?后面还有一句Label2.Caption:=IntToStr(i);呢,当然会有小蓝点啊。
      我的Delphi6不能输入中文~~~to liaokuo(辽阔):确实,没错就可以了。但我实在想知道为什么,因为这个现象会干扰调试的正常进行,说不定什么时候自己写的代码也会有这个现象,那就难调试啦。b.Size会自动调用内存分配的。
      

  13.   

    ^_^,大概你创建的MemoryStream是空的,不好意思,b.size自然为0的啦
      

  14.   

    你是不是在i:=d.size这一句中设置了断点,如果时,那样不是0才怪,设置断点后,停顿在i:=d.size这一句,这是这一句还没有被执行,也就是说i还没有被赋值,你可以试着在i:=d.size的下一句设置断点!
      

  15.   

    你是不是在i:=d.size这一句中设置了断点,如果时,那样不是0才怪,设置断点后,停顿在i:=d.size这一句,这是这一句还没有被执行,也就是说i还没有被赋值,你可以试着在i:=d.size的下一句设置断点!
      

  16.   

    int i;
      TMemoryStream *b=new TMemoryStream;
    //Please add a breakpoint here, when the app run to here, use F8 to debug in steps.
    //在这句加个断点,当程序运行到这里时,用F8单步调试。(用F7我也没意见)
      b->Size=5;
      i=b->Size;
    //Stop here! Move you mouse pointer on the b.Size, and look what the value is?
    //What I saw was 0! What's matter? What do you see? But the i=5 is true, it's confusing , :P
    //在这里停一下,把鼠标移到 b.Size的Size上,看看这时他的值是多少?
    //我看到的居然是0!,怎么回事?你看到的是啥?但是这时i=5确实成立,多么令人迷惑,:P
      Label1->Caption=IntToStr(b->Size);
      Label2->Caption=IntToStr(i);
      

  17.   

    这样就正常,是TTest=Class(TMemoryStream)强行类型转换的问题吧
      

  18.   

    楼上5位(除了superauu的UP)的发言比较……我一并回答了:
    jinfeng_Wang(FanS) TTest是自己写的类,代码都在这里了,仔细看看吧。uwslxcs2(野狼):MemoryStream不是空的。pasl(阿龙1):我没有犯这种低级错误。你瞧瞧楼上8层以上的各位,也都没有犯这种错误。ilikeff8(迷茫) :你把代码改成CBuilder了啊?CBuilder里没有错啊?回头我试试。不过Delphi6里面是不正常的。不过你写的代码已经跟我的不一致了,TTest是从TMemoryStream派生的子类。vcshcn(黑色的星星):跟优化无关。多谢大家。问题仍未解决。
      

  19.   

    你把b.size=5是什么意思?指定内存流的大小?
    首先你的这种操作错误!
    其次你的这个操作不会起作用!
    具体的原因你查看delphi的帮助The size of TMemoryStream will change by
    the Application Automatically!
      

  20.   

    楼上的不要太激动,就算你是对的,也不用那么多感叹号哦:)可惜你还是得不到这90分。我给你解释一下好了,
    TMemoryStream其实没有Size属性的,你在帮助里看到的是TStream.Size的说明吧?确实Size只是从TStream继承来的,但你仔细看看TMomeryStream.SetSize和TStream.Size是如何实现的,要看源码,不要看帮助,否则是难以明白怎么回事的。我来说明一下给Size赋值的过程好了,根据TStream的定义,写Size的时候会调用SetSize64, SetSize64又会调用SetSize, TStream.SetSize确实什么也没做(就像帮助里说的那样),但TMemoryStream重栽了SetSize, 所以调用的是TMemoryStream.SetSize, 而这个SetSize会调用SetCapacity, SetCapacity又会在调用SetPoint的时候调用Realloc改进缓冲区大小,这下你明白了吧?擦汗,天真热,希望不要再回答这种发言了。大侠们都春游去了?如果你感到我说的不对,请具体指出。
      

  21.   

    估计是DELPHI6的Bug。因我在DELPHI4中调试,b.size是5,并且在它被赋值之后始终是5,我用的是WINME。
    汉字输入,估计是输入法的问题,你用什么输入法。
      

  22.   

    Delphi4? 呵呵,以前用的时候好像没这些问题的。我用的是MS拼音2.0加上紫光拼音。
      

  23.   

    你的是Delphi4,当然没问题。我随便用那个输入法都不行。还有人试过在Delphi6里面输中文吗?
      

  24.   

    在Delphi6里面输中文没有问题阿,常用的输入法都试过
      

  25.   

    只好如此了,有点离题了:\有人能说说关于TMemoryStream的问题吗?