Delphi 2009 开发 .Net 程序的一些问题(0分)

  • 主题发起人 主题发起人 龙丹
  • 开始时间 开始时间

龙丹

Unregistered / Unconfirmed
GUEST, unregistred user!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3929521

可能是问题分类没发对,不太容易看到
 
问题:字节比较,结果荒唐

代码说话:
procedure TestGeneric.TestByteNot1;
var
C1,C2: Byte;
begin
C1 := $F0; //Random(255)+1;
C2 := not C1;
CheckEquals($F0, C1);
CheckEquals($0F, C2);
CheckEquals(C2, not C1, '恐怕做梦都没想到这个也会失败');
end;

procedure TestGeneric.TestByteNot2;
var
C1,C2: Byte;
begin
C1 := $F0; //Random(255)+1;
C2 := not C1;
Check(C2 = not C1, '恐怕做梦都没想到这个也会失败');
end;

procedure TestGeneric.TestByteNot3;
var
C1,C2,C3: Byte;
begin
C1 := $F0; //Random(255)+1;
C2 := not C1;
C3 := not C2;
CheckEquals(C2, C3); //通过
end;

运行了N年的代码
if C2 = not C1 then
....
而今出错了,害老汉我找了很久才发现问题在这里,有限的生命又浪费些许
 
问题:调试信息不对,某些代码行无法设置断点
现象:某些代码行左边没有蓝点,无法设置断点,但是,有个奇怪的现象,在接口部分有这样的代码:
Type
...
THexBytes = array[0..15] of Byte;
...
实现部分的某个过程的第一行没有蓝点,在上面类型定义的前后增加其它内容,比如空行、注释、其它类型定义等,那个过程的调试信息始终不变,然而,如果把上面的类型定义改为
THexBytes = array of Byte;
那个过程中的调试信息就正常,而那个过程与THexBytes并无任何关系。

显然,这不是因为调试信息文件和代码文件不匹配以及编译优化一类的原因造成的,目前还没有找到好的解决办法,后来,我只好把这些类型定义搬出来放到一个单独的单元中,这样做也是非常痛苦的,因为有这是一个基础单元,有大约200个文件都用到...
 
俺是目前不敢用2009的
等稳定了再说.
现在还是bug多多
 
瞎讲两句:
可能.Net中所有的类型都为对象,连Integer,string也是对象造成的.
例如:
a,b: integer;
从对象角度来看,他们的内存地址不一样,所以不会相等,但他们的值是相等的.因此,在比较时,编译器对这种情况做了处理(类似于重载操作符).
呵呵,纯理论瞎讲.错了莫怪.
 
其他道是Check的参数传递!
但是if C2 = not C1 then 也不行那就不能用的了!
 
后退
顶部