procedure TForm1.Button1Click(Sender: TObject);
var
 i:integer;
 str:string;
begin
 i:=100;
 str:='已生成'+inttostr(i)+'记录';
 application.messagebox(pchar(str),'记录退出提示',MB_ICONINFORMATION+MB_OK);
end;

解决方案 »

  1.   

    pchar to string: string(pchar);
    string to pchar: pchar (string);
      

  2.   

    事实上,Delphi中的string类型(缺省情况下等价于AnsiString类型,参考H编译指示)在内存中的布局是和PChar兼容的,因此对于需要PChar类型的参数的地方仅需要使用强制类型转换的语法即可通过编译器的类型检查,即:PChar(str)。同样,PChar类型也是和string兼容的,又因为在Windows编程中PChar非常的常见,因此对于string类型的参数,根本就不用任何强制转换的过程,也就是说PChar类型直接可以作为string类型使用。不过在COM编程时有可能会用到Unicode字串类型(即WideString),Delphi内部直接支持使用强制类型转换的语法对AnsiString和WideString进行转换,不过这时候若普通字串是一个PChar,则必须写成string(PChar)的形式,即WideString(string(PChar)),否则转换将出错。
      

  3.   

    在补充个小窍门,想简单的显示什么东西而不担心她的类型,可以将其强制转换成Variant,如ShowMessage(Variant(Now))等等。另外一般Delphi封装的方便的函数接受的都是自己的string类型(当然PChar可以直接当string用),所以像Application.MessageBox这样的含书都是接受string的,不用费心转换的。一般只有直接的调用API才会用到PChar。
      

  4.   

    补充一点:
      如果 Str='' 则PChar(Str)=nil,
      这样可能在调用时引起内存访问错误,须加判断,或改用array[0..X] of PChar
        
      

  5.   

    application.messagebox(PCHAR('已生成'+inttostr(i)+'记录'),'记录退出提
    示',MB_ICONINFORMATION+MB_OK);给分
      

  6.   

    不好意思更正一下,Application.MessageBox的前两个参数是PChar类型的,LaoZheng的答案是正确的。不过一般常用ShowMessage,MessageDlg等函数显示提示信息,如:MessageDlg('已生成'+inttostr(i)+'记录',mtInformation,[mbOK],0); 
    在Delphi中,常量字符串可用于PChar和Wide/AnsiString(即缺省{$H+}情况下的string),string类型字符串(其变量其实是个指针)内存布局同PChar相同,但要用于PChar时需做强制类型转换,array [0..len-1] of char可用于PChar和string。PChar可用于string。
      

  7.   

    用函数strpcopy即可。你试一试!
      

  8.   

    最简单的办法:
    Application.Messagebox(PChar('已生成'+IntToStr(i)+'记录'),'记录退出提示',MB_ICONINFORMATION+MB_OK);