TA的每日心情 | 无聊 2017-5-31 13:17 |
---|
签到天数: 5 天 [LV.2]偶尔看看I
|
本帖最后由 cjteam 于 2010-12-20 11:32 编辑
首先我们来看看注册机的代码.- function dz(s:string):string;
- var
- i:integer;
- begin
- for i:=1 to length(s) do
- result:=s+result;
- end;
- procedure TForm1.Edit1Change(Sender: TObject);
- var
- i:integer;
- a:string;
- begin
- for i:= 1 to length(edit1.Text) do
- a:=a+inttohex(ord(edit1.text),2);
- edit2.Text:='JXCw-'+copy(dz(a),1,4)+'268d5-'+copy(dz(a),5,4);
- end;
复制代码 --------------------------------------------------------
使用这个代码是怎么也编译不了,提示错误Incompatible types,中文为不兼容的类型。
就这句 a:=a+inttohex(ord(edit1.text),2); 在Delphi7下过不去,查找资料,原来是Delphi7 的ord()函数只能给字符,也就是char型.
引用原文的话:在翻译vb的程序时,发现一个以前认为是正确的现在看来并不是那么回事的现象,就是 vb里的mid()函数和Delphi理的copy 并不是一回事,即mid(s,1,1)也不等于copy(s,1,1),很简单,MSDN描述的mid是从字符串中返回指定数目的字符。也就是返回的char型,而copy返回的string型。
原理:ord接受的类型是char,而我们的编辑框内容是字符串,显然不匹配了。
其实这个是原写注册机的笔误,下面提供修正的代码:- function dz(s:string):string;
- var
- i:integer;
- begin
- for i:=1 to length(s) do
- result:=s+result;
- end;
- procedure TForm1.Edit1Change(Sender: TObject);
- var
- i:integer;
- a:string;
- begin
- for i:=1 to length(edit1.text) do
- a:=a+inttohex(ord(edit1.text[i]),2);
- edit2.Text:='JXCw-'+copy(dz(a),1,4)+'268d5-'+copy(dz(a),5,4);
- end;
复制代码 参考链接:http://www.hackline.net/a/school/ymbc/delphi/2010/0603/4280.html |
|