使用Delphi TOSVersion.TArchitecture在Windows中进行OS体系结构确定

Rub*_*der 0 delphi

我有一个表格有一个TEdit和一个TButton.我正在尝试确定OS体系结构.所以我按照Embarcadero论坛的建议定义了以下代码:

function OSArchitectureToStr(const a: TOSVersion.TArchitecture): string;
function OSPlatformToStr(const p: TOSVersion.TPlatform): string;
function PlatformFromPointer: integer;
.
.
.
.
.

function OSArchitectureToStr(const a: TOSVersion.TArchitecture): string;
begin
  case a of
    arIntelX86: Result := 'Intel X86';
    arIntelX64: Result := 'Intel X64';
    else
      Result := 'UNKNOWN OS Aarchitecture';
  end;
end;

function OSPlatformToStr(const p: TOSVersion.TPlatform): string;
begin
  case p of
    pfWindows: Result := 'Windows';
    pfMacOS: Result := 'MacOS';
    else
      Result := 'UNKNOWN OS Platform';
  end;
end;

function PlatformFromPointer: integer;
begin
  Result := SizeOf(Pointer) * 8;
end;
.
.
.
.
.
procedure TMainForm.BitBtn1Click(Sender: TObject);
begin
  Edit1.Text := OSPlatformToStr(TOSVersion.Platform) + ' ' + IntToStr(PlatformFromPointer) + ' Bit';
end;
Run Code Online (Sandbox Code Playgroud)

但问题是,虽然它是64Bit OS,但它总是会产生32Bit OS.请帮我.

And*_*and 5

您(错误地!)使用以下内容来获取架构:

function PlatformFromPointer: integer;
begin
  Result := SizeOf(Pointer) * 8;
end;
Run Code Online (Sandbox Code Playgroud)

现在,在32位应用程序中,SizeOf(Pointer)等于4,而在64位应用程序中,它等于8.所以这只会检查正在编写什么类型的应用程序,而不是它正在运行的操作系统!(所以,很明显,你的应用程序是32位的.这与32位或64位的操作系统无关.)

你可能想调查一下TOSVersion.Architecture.但你没有.事实上,你从来没有使用它(或OSArchitectureToStr!).

你想要的是什么OSArchitectureToStr(TOSVersion.Architecture).