0

私は 1 つの TEdit と 1 つの TButton を持つ 1 つのフォームを持っています。OS アーキテクチャを決定しようとしています。そのため、エンバカデロ フォーラムで提案されているように、次のコードを定義しました。

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;

しかし問題は、64Bit OSなのに常に32Bit OSになってしまうことです。私を助けてください。

4

2 に答える 2

5

(誤って!) 以下を使用してアーキテクチャを取得します。

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

現在、32 ビット アプリケーションでは にSizeOf(Pointer)等しく4、64 ビット アプリケーションでは に等しくなり8ます。したがって、これは、作成しいるアプリケーションのタイプを調べるだけで、実行している OS は調べません! (つまり、明らかに、アプリケーションは 32 ビットです。OS が 32 ビットか 64 ビットかは関係ありません。)

おそらく、TOSVersion.Architecture代わりに調査する必要があります。しかし、あなたはしません。実際、まったく使用しません (またはOSArchitectureToStr!)。

あなたが欲しいのはですOSArchitectureToStr(TOSVersion.Architecture)

于 2013-03-22T16:49:29.997 に答える