我有一个表格有一个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.请帮我.
您(错误地!)使用以下内容来获取架构:
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).
| 归档时间: |
|
| 查看次数: |
1210 次 |
| 最近记录: |