目前,我将DecimalSeparator设置为'.' 在每个使用这些功能的程序中.
在程序开始时全局设置它会容易得多,但我发现Delphi似乎会定期将其设置回当前的语言环境.
无论程序使用哪个国家/地区,我都需要确保所有转换都使用小数点,因为这是此类程序的标准,所有文件结构和通信协议,表单/编辑中的数字显示等都是必需的以这种方式格式化.
我在另一个帖子中被告知使用decimalseparator不是正确的方法,但我没有给出任何替代方案.我读过的关于这个主题的其他主题似乎没有提供任何形成性指导或过于复杂.
有一个简单的"正确"方法吗?
我有一个项目,其中多个单位有初始化部分.我想控制执行此块的顺序.
根据以下问题,这是基于单位编制的顺序,因此最终订单应基于源DPR的使用条款中的单位安排.
以下是我项目的DPR来源:
program X;
uses
  Vcl.Forms,
  uMain in 'uMain.pas' {MainForm},
  uFooA in 'uFooA.pas',
  uFooB in 'uFooB.pas';
{$R *.res}
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end.
我的问题是,这根本不是初始化块的执行顺序.
How it should be |  How it actually is
                 | 
  1. uMain       |     1.uFooA
  2. uFooA       |     2.uFooB  
  3. uFooB       |     3.uMain
我很想提供一个SSCCE,但我无法在一个新项目上重新产生这个问题.
我尝试重建项目但没有成功.
我错过了什么?
我需要为包含的 3rd 方库设置两个环境变量(当我的应用程序运行时)。
问题是“那样”它不起作用,但是当我运行控制台应用程序时,设置这两个变量然后运行应用程序,一切正常......
如何正确配置这两个变量?
我使用的程序:
function SetEnvVarValue(const VarName,
  VarValue: string): Integer;
begin
  // Simply call API function
  if SetEnvironmentVariable(PChar(VarName),
    PChar(VarValue)) then
    Result := 0
  else
    Result := GetLastError;
end;
它返回 0
也许问题是,我在应用程序启动时加载了库。当我的应用程序启动时,我设置了变量,但我这样做太晚了......?
更多信息
我在 dpr 中包含了两个单元:
'C:\Program Files (x86)\Borland\Delphi7\Lib\Magick\magick\ImageMagick.pas' 中的 ImageMagick,'C:\Program Files (x86)\Borland\Delphi7\Lib\Magick\wand\magick_wand 中的 magick_wand .pas';
和单位:
unit DoItFirst;
interface
uses
  Windows, Sysutils;
var
  s: string;
  error: Integer;
function _putenv_s(const lpName, lpValue: PChar): BOOL; cdecl; external 'msvcrt.dll';
implementation
function GetEnvVarValue(const VarName: string): string;
var
  BufSize: Integer;  // buffer size …