![]() |
AW: 32-Bit-Programm soll 32- und 64-Bit-OS erkennen
Das mit der Environment-Variable erschien mir schon optimal, aber dann wurde die Idee hier eingeworfen, sie selbst zu defnieren....
Zitat:
|
AW: 32-Bit-Programm soll 32- und 64-Bit-OS erkennen
Zitat:
VAR + BOOL (delphilike) oder PBOOL (WinAPI-vorgabe) Und das ist natürlich eine statiscjhe Bindung, welche vor WinXP SP2 überall knallen wird. Mit ![]() Und dann mit ![]() Statt LoadLibrary (hier FreeLibrary am Ende nicht vergessen) kann man auch ![]() Zitat:
|
AW: 32-Bit-Programm soll 32- und 64-Bit-OS erkennen
Also diese:
Delphi-Quellcode:
Genau das haben wir ja schon gesagt: Dynamisch einbinden.
function IsWOW64: Boolean;
type TIsWow64Process = function( // Type of IsWow64Process API fn Handle: THandle; var Res: BOOL ): BOOL; stdcall; var IsWow64Result: BOOL; // result from IsWow64Process IsWow64Process: TIsWow64Process; // IsWow64Process fn reference begin // Try to load required function from kernel32 IsWow64Process := GetProcAddress( GetModuleHandle('kernel32'), 'IsWow64Process' ); if Assigned(IsWow64Process) then begin // Function is implemented: call it if not IsWow64Process(GetCurrentProcess, IsWow64Result) then raise Exception.Create('Bad process handle'); // Return result of function Result := IsWow64Result; end else // Function not implemented: can't be running on Wow64 Result := False; end; Aber ich würde sie umbenennen: Is32BitProcess bei IsWow64Process bekomme ich immer einen Knoten im Hirn. Ich muss dann immer überlegen was es eigentlich heißt. |
AW: 32-Bit-Programm soll 32- und 64-Bit-OS erkennen
Und die Funktion muss ja im Gegensatz zur ersten Behauptung in beiden DLL-Versionen vorhanden sein:
- 32Bit-Exe: kann keine 64Bit-DLL laden und somit die Funktion gar nicht ermitteln -> sie wäre somit nutzlos - 64Bit-Exe: sobald sie läuft, ist das ja wohl automatisch ein 64Bit-OS :D |
AW: 32-Bit-Programm soll 32- und 64-Bit-OS erkennen
Die 32 bit .exe lädt automatisch die 32 bit kernel32.dll, eine 64 bit .exe lädt automatisch die 64 bit kernel32.dll :)
Somit sähe das korrekt so aus: - 32Bit-Exe unter 32Bit-Win: lädt kernel32.dll(32Bit), findet dort kein IsWow64Process - also false. - 32Bit-Exe unter 64Bit-Win: lädt kernel32.dll(32Bit), findet dort IsWow64Process - also true. - 64Bit-Exe: lädt kernel32.dll(64bit), findet dort IsWow64Process, welches false zurückgeben dürfte. Ein Umbenennen in Is32BitProcess wäre etwas anderes (bzw. das kommt halt drauf an, wie man obige Situationen auswertet) - Is32BitProcess wäre für mich aber vermutlich sinnlos, weil ich das bereits zur Compile Time per Direktive regeln könnte. |
AW: 32-Bit-Programm soll 32- und 64-Bit-OS erkennen
Ja eben, von daher stimmt die anfangs getroffene Behauptung, die Funktion gäbe es nur in der 64Bit-Version der DLL, nicht bzw. kann ja gar nicht stimmen.
|
AW: 32-Bit-Programm soll 32- und 64-Bit-OS erkennen
Zitat:
|
AW: 32-Bit-Programm soll 32- und 64-Bit-OS erkennen
Das darf auch nicht knallen, weil die Funktion dort existieren sollte. (Bei mir jedenfalls ist die da.)
// EDIT: Nebenbei steht bei Microsoft explizit, dass man diese Funktion nicht statisch einbinden sollte. ;-) // EDIT2: Ok, ist bei mir auch SP3, das wurde im virtuellen PC doch schon automatisch aktualisiert. Aber grad nochmal zurückgesetzt, die Funktion ist auch mit SP1 dabei. |
AW: 32-Bit-Programm soll 32- und 64-Bit-OS erkennen
Zitat:
|
AW: 32-Bit-Programm soll 32- und 64-Bit-OS erkennen
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz