我正在将我的应用程序转换为Delphi 2009,并且需要将一个字符串(宽)转换为AnsiString的一些调用面临一个有趣的问题。
以下是一个示例来说明我遇到的问题:
var s: PAnsiChar; ... s := PAnsiChar(Application.ExeName);
使用Delphi 2007和以前的版本,s:= PChar(Application.ExeName)将返回应用程序exe路径。
使用Delphi 2009,s:= PAnsiChar(Application.ExeName)只返回’E’。
我的猜测是因为我将unicode字符串转换为ansi字符串,但是如何转换它,以便PAnsiChar获取完整的字符串?
解决方法
我在这里没有德尔福2009,所以我不能检查。但也许你必须尝试:
s := PAnsiChar(AnsiString(Application.ExeName));
正如gabr已经指出的那样,这不是一个很好的做法,只有当你100%确定时才使用它,字符串只包含与ansi范围直接映射的字符。
这就是为什么你应该得到一个警告,因为你将Unicode转换为Ansi。