Oli*_*ons 1 delphi string compiler-warnings delphi-xe
我正在尝试从Delphi 2007迁移到Embarcadero RAD Studio XE.我收到了很多警告.它们都看起来像这样:我有一个程序,我声明一个"字符串":
procedure SendMail( ADestinataire,ASubject : String);
Run Code Online (Sandbox Code Playgroud)
我正在尝试将Windows API称为:
Res := MAPIResolveName(Session, Application.Handle,
PAnsiChar(ADestinataire), MAPI_LOGON_UI, 0, PRecip);
Run Code Online (Sandbox Code Playgroud)
所以警告是:
W1044:将字符串转换为PAnsiChar可疑.
我做错了什么/我该怎么纠正这个(350警告......)?
非常感谢你
MAPIResolveName使用LPSTR参数,即Delphi中的PAnsiChar.简单MAPI不支持UTF16字符串(虽然它可以与UTF8字符串一起使用),因此如果你遵守简单的MAPI,你应该使用AnsiStrings,例如
procedure SendMail( ADestinataire,ASubject : AnsiString);
Run Code Online (Sandbox Code Playgroud)
或者更好,你可以使用
procedure SendMail( ADestinataire,ASubject : String);
Run Code Online (Sandbox Code Playgroud)
并在调用MAPIResolveName之前显式地将字符串参数转换为AnsiStrings
更新现在不推荐使用 整个简单MAPI ; 简单MAPI可以与UTF8字符串一起使用,但它需要在代码和注册表中进行一些更改.
因此,如果问题是关于快速将旧的ANSI简单MAPI移植到Unicode Delphi,最好是遵守AnsiStrings.
一种更可靠的方法是完全放弃简单MAPI并使用扩展MAPI.