PWide Char и String Confusion в Delphi пытаются отправить электронное письмо - PullRequest
0 голосов
/ 24 марта 2012

Программа возвращает ошибку, ожидаемую 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 Ответ

4 голосов
/ 24 марта 2012

Все, что вам нужно сделать, это поместить строку внутрь PChar(), чтобы «привести» ее к 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;
...