windows - 当 VAR_LOCALE_USER_DEFAULT 作为参数提供时,是什么导致 VarDateFromStr 无法使用当前用户的区域设置

标签 windows delphi ole

这是 that question 的跟进.

正如所问,当 VAR_LOCALE_USER_DEFAULT 作为参数提供时,是什么导致 VarDateFromStr(来自 Oleaut32.dll)无法使用当前用户的区域设置?

因此,我们的应用程序遇到了很多问题。

在有问题的系统上,如果我们执行以下代码:

procedure TForm1.Button3Click(Sender: TObject);
var V : Variant;
    dte : TDateTime;
begin
  V := Label28.Caption;
  dte := VarAsType(V,varDate) ; //Implicitly calls VarDateFromStr
  V := dte;
  Label28.Caption := V; //Implicitly calls VarBStrFromDate
end;

Label28 以标题“11-05-2010”开头,每次调用之间标题将从 11-05-2010 交替为 05-11-2010。

在给定系统上,GetLocaleStr(GetThreadLocale, LOCALE_SSHORTDATE, 'm/d/yy') 返回“dd-MM-yyyy”(当前用户的短日期格式)

问题发生在 WinXP SP3 上。 (虽然我们的应用程序未在任何其他操作系统版本上使用,但不能说它是否特定于该版本)。

我最初的想法是它可能与安全相关(用户的安全性是密不可分的),但我还无法证明这一点。

最佳答案

可能的答案是用户的默认语言环境不是您的特定 o/s 实例支持的 lcid。

解决方法很简单 - 只是不要使用难看的变体。请尝试使用 DateTimeToString。 附言还有助于指定您的 Delphi 版本。

关于windows - 当 VAR_LOCALE_USER_DEFAULT 作为参数提供时,是什么导致 VarDateFromStr 无法使用当前用户的区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4208179/

相关文章:

delphi - 无法通过Delphi替换word应用程序中的页脚文本

windows - 如何使用 VirtualBox 创建 VM 的可再发行自包含二进制发行版?

python - FFMPEG 转换为音频格式时不保存日志

delphi - 如何检测 CD/DVD/USB 何时插入或移除并获取驱动器盘符?

delphi - CheckListBox 项目样式

delphi - 在64位Delphi程序中CreateOleObject?

excel - 如何从 vbaProject.bin 提取的十六进制流读取 vba 代码?

windows - 如何从 TFS 构建定义输出 Windows 服务项目

c# - Windows 域登录可以包含超过 1 个 '\' 字符吗?

delphi - 如何为我的应用程序创建自定义键盘