0

我有一个带有一个 TEdit 和一个 TButton 的表单。我正在尝试确定操作系统架构。因此,我按照 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;

但问题是尽管它是 64 位操作系统,但它总是导致 32 位操作系统。请帮我。

4

2 回答 2

5

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

function PlatformFromPointer: integer;
begin
  Result := SizeOf(Pointer) * 8;
end;

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

您可能想要进行调查TOSVersion.Architecture。但你没有。事实上,你根本不会使用它(或OSArchitectureToStr!)。

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

于 2013-03-22T16:49:29.997 回答
0

为了获得32位和/或64位版本的应用程序(进程),需要在项目中添加相应的编译器。在 * .dproj - Project 窗口中,选择 Target Platforms 项并添加 Windows 64-bit (当然您必须安装该选项)现在您可以将目标平台设置为 32 位或 64 位

于 2021-03-19T03:16:42.303 回答