【发布时间】:2012-02-01 16:57:48
【问题描述】:
我在 Delphi XE 中有以下内容:
fSettings := TFormatSettings.Create(LOCALE_USER_DEFAULT);
但我总是在编译时收到警告:
W1002 Symbol 'Create' is specific to a platform
这样做的正确方法是什么,这样我就不会收到警告?
【问题讨论】:
我在 Delphi XE 中有以下内容:
fSettings := TFormatSettings.Create(LOCALE_USER_DEFAULT);
但我总是在编译时收到警告:
W1002 Symbol 'Create' is specific to a platform
这样做的正确方法是什么,这样我就不会收到警告?
【问题讨论】:
你有两个选择
1) 使用使用字符串而不是TLocaleID的重载版本
class function Create(const LocaleName: string): TFormatSettings; overload; static;
2) 在本地禁用警告
{$WARN SYMBOL_PLATFORM OFF}
fSettings := TFormatSettings.Create(LOCALE_USER_DEFAULT);
{$WARN SYMBOL_PLATFORM ON}
【讨论】:
SetThreadLocale 的调用,因为可以更改此函数的结果。
TFormatSettings.Create 有不同的重载。具有 LCID 的那个是特定于 Windows 的。不带任何参数的和将语言环境名称作为字符串的更可移植。
或者,如果您知道您的软件将永远不会用于除 Delphi for Windows 之外的任何其他用途,那么您可以取消针对特定平台单元和过程的警告。 VCL 包含现在不受支持的平台的痕迹,例如 Linux (Kylix) 和 .NET (Delphi.NET),由于它们已经死了,所以让您的代码可移植到这些平台可能是浪费时间。
【讨论】:
我的代码现在写成如下:
{$IFDEF VER220}
FormatSettings := TFormatSettings.Create(GetThreadLocale);
{$ELSE}
GetLocaleFormatSettings(GetThreadLocale, FormatSettings);
{$ENDIF}
您可能希望为将来的适当版本调整该 IFDEF,但它提供了这个想法。
【讨论】: