我编了一个程序:
procedure TForm1.Button6Click(Sender: TObject);
var
str:string;
begin
if OpenDialog1.Execute then
 begin
 str:=OpenDialog1.FileName;
 copyfile(str,'c:\com.db',false);
 end;
end;
但在编译时出错,提示:[Error] Unit1.pas(47): Incompatible types: 'String' and 'PAnsiChar'
这是为什么?该怎么改?
还有什么可以解决问题的文件拷贝函数吗?谢谢!

解决方案 »

  1.   

    这样应该就可以了procedure TForm1.Button6Click(Sender: TObject);
    var
    str:string;
    begin
    if OpenDialog1.Execute then
     begin
     str:=OpenDialog1.FileName;
     copyfile(PChar(str),'c:\com.db',false);
     end;
    end;
      

  2.   

    因为这是一个API函数,API函数是用C/C++定义的,
    它的参数是一个C类型的字符串,
    而Delphi是Object Pascal,与之对应的没有这个数据类型,
    所以就用PChar()转换成C类型的字符串(字符数组)。
      

  3.   

    C/C++定义的字符串是以'/0'结尾的, 而Pascal则不是, 所以用Delphi调用API时, 用到字符串时都要用PChar()转换. 但是反过来则不用, PChar的字符串可以直接赋给TString.