不兼容的类型pwidechar和string ShellExecute

3
我尝试使用winrar命令行压缩文件,但是当我在命令行中添加变量时,会出现以下错误:不兼容的类型'PWideChar'和'string'!我将sdate变量转换为WideChar,但它没有起作用!!我该如何解决这个问题!
procedure TForm1.Button1Click(Sender: TObject);
var
mydate : TDateTime;
sdate : string;
begin
mydate:= Now-7;
sdate := FormatDateTime('YYYY/mm/dd',mydate);
  ShellExecute(0, 'open', PChar('C:\Program Files\WinRAR\WinRar.exe'),
    'a -r -ta'+ PChar(sdate) +' D:\xlsFiles.rar D:\*.xls*', nil, SW_SHOW);
end;

1
ShellExecute已过期,应使用ShellExecuteEx,后者能够以明智的方式报告错误。但是,由于您正在执行新进程,最好调用CreateProcess - David Heffernan
你可能想跳过调用另一个进程,而是使用一个 zip 库,例如内置的 TZipFile、Abbrevia 等。 - Uli Gerhardt
1个回答

7
ShellExecute的文本参数类型为PChar,但您却为第四个参数提供了一个字符串。
错误消息非常清晰。通过检查ShellExecute的声明,您可以知道有问题的参数是PChar类型(它是PWideChar的别名)。而错误消息告诉您,您正在传递一个string
请改为:
'a -r -ta'+ PChar(sdate) +' D:\xlsFiles.rar D:\*.xls*'

通过

PChar('a -r -ta'+ sdate +' D:\xlsFiles.rar D:\*.xls*')

谢谢,它起作用了, 但是PChar和PWideChar之间有什么区别?因为两者都可以工作! - K.MuS
这在第二段已经讲到了,我说PCharPWideChar的别名。它也有文档记录(http://docwiki.embarcadero.com/Libraries/en/System.PChar),但这份特定的文档真是糟糕透顶…… - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接