小弟的BCB程序中用到了部分Delphi代码,在BCB6和BCB2007中都编译运行正常,但在2009中报错了,小弟对Delphi不熟,看哪位能帮忙看一下是什么原因,代码如下: Delphi(Pascal) code
function Find_Codabar(c:char):integer;
var
i:integer;
begin
for i:=0 to High(tabelle_cb) do
begin
if c = tabelle_cb[i].c then
begin
result := i;
exit;
end;
end;
result := -1;
end;var
i, idx : integer;
begin
result := tabelle_cb[Find_Codabar('A')].data + '0'; -->这条语句在RAD2009中报[DCC Error](1048): E2008 Incompatible types错误,BCB6和2007都没有问题
for i:=1 to Length(FText) do
begin
idx := Find_Codabar(FText[i]);
result := result + tabelle_cb[idx].data + '0';
end;
result := result + tabelle_cb[Find_Codabar('B')].data;
end;
function Find_Codabar(c:char):integer;
var
i:integer;
begin
for i:=0 to High(tabelle_cb) do
begin
if c = tabelle_cb[i].c then
begin
result := i;
exit;
end;
end;
result := -1;
end;var
i, idx : integer;
begin
result := tabelle_cb[Find_Codabar('A')].data + '0'; -->这条语句在RAD2009中报[DCC Error](1048): E2008 Incompatible types错误,BCB6和2007都没有问题
for i:=1 to Length(FText) do
begin
idx := Find_Codabar(FText[i]);
result := result + tabelle_cb[idx].data + '0';
end;
result := result + tabelle_cb[Find_Codabar('B')].data;
end;
是字符串类型嘛?
function T1DBarcodes.Code_Codabar:string;
type TCodabar =
record
c : char;
data : array[0..6] of char;
end;const tabelle_cb: array[0..19] of TCodabar = (
( c:'1'; data:'5050615' ),
( c:'2'; data:'5051506' ),
( c:'3'; data:'6150505' ),
( c:'4'; data:'5060515' ),
( c:'5'; data:'6050515' ),
( c:'6'; data:'5150506' ),
( c:'7'; data:'5150605' ),
( c:'8'; data:'5160505' ),
( c:'9'; data:'6051505' ),
( c:'0'; data:'5050516' ),
( c:'-'; data:'5051605' ),
( c:'$'; data:'5061505' ),
( c:':'; data:'6050606' ),
( c:'/'; data:'6060506' ),
( c:'.'; data:'6060605' ),
( c:'+'; data:'5060606' ),
( c:'A'; data:'5061515' ),
( c:'B'; data:'5151506' ),
( c:'C'; data:'5051516' ),
( c:'D'; data:'5051615' )
);
这是tabelle_cb的定义
用如string()之类的转换试试.
你的tabelle_cb[Find_Codabar('A')].data 返回的是array of char类型,在2009中,听说字符串都是UniCode,应该不能与array of char连接吧。
建议将tabelle_cb[Find_Codabar('A')].data 做个转换,再连接看看。 没环境,没2009资料。纯推理。
D2009能在编译的时候就不通过,我觉得这个非常好。Delphi原来编译提示功能就是不太强举例:在D里面下面的代码是正常,程序跑的也很好.function Hello(const s:string):Boolean;
begin
showmessage(s);
end;如果哪天有人调用这句就死定了,永远成立不了 if Hello('ddd') then 我感得这样D还应该加强这方面
以下代码在C#编译通不过,将会提示没有返回值,我想没人会喜欢上面那种不提示的,如果有人说喜欢的话,那就无语了...public bool Hello(string s)
{
MessageBox.Show(s);}
function Hello(const s:string):Boolean;
begin
showmessage(s);
end; Delphi是有警告的,你视而不见罢了。
但是这下面的提示又有几个人会真正的去注意呢.但这个带来的结果是,有可能程序查了两天了,结果才发现原来这里少了个
返值,D2009这个依然没有加强,真希望下一版有所改变
这句话的功能是求两个字符ascll值的和吗?
type TCodabar =
改成
function T1DBarcodes.Code_Codabar:Ansistring;
type TCodabar =