尝试发送电子邮件的Delphi中的PW Char和String Confusion

时间:2012-03-23 20:18:53

标签: delphi delphi-xe

程序返回错误,预期的PWideChar而不是字符串

procedure TForm1.Button1Click(Sender: TObject);
var
  mailtoStr, subject, body : string;
begin
mailtostr := 'mailto:theirEmail@hotmail.com';
subject := '?Subject=Email Subject';
body :=  '&Body=Email Body';
ShellExecute(Self.Handle,
             nil,
             mailtostr +
             subject+
             body,
             nil,
             nil,
             SW_NORMAL);
end;

所以我把代码改为......

StringToWideChar('mailto:'+MailToStr+'?Subject=' + edSubject.Text+'&Body=' + edBody.Text, MailToWideChar, Length('mailto:'+MailToStr+'?Subject=' + edSubject.Text+'&Body=' + edBody.Text));

换句话说,把它全部放在一行上,然后把剩下的程序改为......

ShellExecute(Self.Handle,
             nil,
             MailToWideChar,
             nil,
             nil,
             SW_NORMAL);

但是在StringToWideCharLine上遇到运行时异常错误:S

..任何想法为什么?

1 个答案:

答案 0 :(得分:4)

您所要做的就是将字符串放在PChar()内以“#cast;”#39;它是PChar

procedure TForm1.Button1Click(Sender: TObject);
var
  mailtoStr, subject, body: string;
begin
  mailtostr := 'mailto:theirEmail@hotmail.com';
  subject := '?Subject=Email Subject';
  body := '&Body=Email Body';
  ShellExecute(Self.Handle,
               nil,
               PChar(mailtoStr + subject + body),
               nil,
               nil,
               SW_NORMAL);
end;