delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks
2个基础问题:如何修改PCHAR? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205132245286.html
1.如何增加字符到PCHAR?如:  
  p:pchar  
  GetWindowText(p....)  
  想在前面加上个'D'如何加?  
  (不要用STRING转换)  
   
  2.Delphi中最大数值类型是什么?  
  n:int64;  
  n:=24*256*256*256+19*256*256+204*256+26  
  编辑报错!!   如何解决?

第2个问题不会抱错,我刚测试了

function   CharAddToPchar(p:pchar;c:char):pchar;  
  var  
        arr:array   of   char;  
        pIndex:integer;  
        pTemp:Pchar;  
  begin  
        setlength(arr,length(p)+1);  
        for   pIndex:=0   to   length(p)-1   do  
                arr[pIndex]:=p[pIndex];  
        arr[length(p)]:=c;  
        result:=@arr[0];  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
        p:pchar;  
  begin  
        p:=pchar('abcdef');  
        showmessage(strpas(CharAddToPchar(p,char('a'))));  
  end;

上面是我对第一个问题的回答。其中,函数内部变量声明了一个pTemp是多余的,请删去。

重新改写了一个:  
  Procedure   CharAddToPchar(var   p:pchar;c:char);  
  var  
        arr:array   of   char;  
        pIndex:integer;  
  begin  
        setlength(arr,length(p)+1);  
        arr[0]:=c;  
        for   pIndex:=1   to   length(p)   do  
                arr[pIndex]:=p[pIndex-1];  
        p:=@arr[0];  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
        p:pchar;  
  begin  
        p:=pchar('abcdef');  
        CharAddToPchar(p,char('D'));  
        showmessage(strpas(p));  
  end;  
   
  与我在前面给出的那个有以下不同:  
  1、按楼主要求,把字符D加在了PCHAR指向的字串的前面;  
  2、使用了引用传值(最选给出的是函数,靠创建一个Pchar副本返回;而现在这个过程是直接改变原Pchar。  
  错误之处,请指正。

1.如何增加字符到PCHAR?如:  
  p:pchar  
  GetWindowText(p....)  
  想在前面加上个'D'如何加?  
  (不要用STRING转换)  
   
  PCHAR是个指向字符的指针,如果它指向一串字符串,那我们操作它所指的值时,可以通过指针访问.  
  如:  
  var  
      p:pchar;  
      str:string;  
  begin  
      str:='test';  
      p:=@str[1];  
      showmessage(p^);//---显示第一个字符  
      inc(p);  
      showmessage(p^);//---显示第二个字符  
  end;  
   
  如果要操作这个串,要用缓冲的办法,因为重新分配内空间才可以........  
  正如这样:(lihuasoft(学习低调做人)   (   )   信誉:100         Blog   所写函数)  
  重新改写了一个:  
  Procedure   CharAddToPchar(var   p:pchar;c:char);  
  var  
        arr:array   of   char;//--这个就是新的缓冲区.....  
        pIndex:integer;  
  begin  
        setlength(arr,length(p)+1);  
        arr[0]:=c;  
        for   pIndex:=1   to   length(p)   do  
                arr[pIndex]:=p[pIndex-1];  
        p:=@arr[0];  
  end;  
   
   
  2.Delphi中最大数值类型是什么?  
  n:int64;  
  n:=24*256*256*256+19*256*256+204*256+26  
  //--24*(2^24)+19*(2^16)+204*(2^8)+26  
  编辑报错!!   如何解决?  
   
  int64         8bytes     表示2的64次方;  
  Int64 -2^63..2^63-1 signed   64-bit

嘎嘎...辣椒...我多日不到群里去了

^__^  
  我也好些日子没有去群里面混了.

谢谢!  
   
  趁机再问1个小问题:(回答后立即结帐)  
  用POP3指令UIDL及RECR得到的MAIL内容好象都是编码后的例如(tbiBAdFOkBz86iTmgAAsd)  
  这种是什么编码方式?   如何解码??

估计是BASE64编码吧

奇怪!  
  为何pwidechar一用strlen就报错?  
  有何解决办法?

建议楼主重新发贴,利于别人回答。  
  因为你的新问题藏在旧贴里,别人很容易看不到。

回贴并不是义务  
  结贴却是一种美德

posted on 2009-04-22 10:43 delphi2007 阅读(257) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。