überprüfen ob 64 oder 32 bit (gelöst)

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

überprüfen ob 64 oder 32 bit (gelöst)

Beitrag von Bauer321 »

Wie kann ich mit Lazarus überprüfen ob das Programm mit einem 64 oder 32 bit Betriebssystem nutzt?
(wenn Lazarus da keine möglichkeiten bietet würde ich mal http://msdn.microsoft.com/en-us/library/ms684139(v=VS.85).aspx ausprobieren)

habe da jetzt folgendes gefunden:

Code: Alles auswählen

{Quelle: http://www.delphipraxis.net/118485-ermi ... ystem.html
         24.08.11 18 Uhr}

function IsWindows64: Boolean;
type
  TIsWow64Process = function( // Type of IsWow64Process API fn
    Handle: Windows.THandle; var Res: Windows.BOOL): Windows.BOOL; stdcall;
var
  IsWow64Result: Windows.BOOL; // Result from IsWow64Process
  IsWow64Process: TIsWow64Process; // IsWow64Process fn reference
begin
  // Try to load required function from kernel32
  IsWow64Process := Windows.GetProcAddress( // in dieser Zeile ist der Fehler!
    Windows.GetModuleHandle('kernel32'), 'IsWow64Process'
    );
  if Assigned(IsWow64Process) then
  begin
    // Function is implemented: call it
    if not IsWow64Process(
      Windows.GetCurrentProcess, IsWow64Result
    ) then
      raise SysUtils.Exception.Create('IsWindows64: bad process handle');
    // Return result of function
    Result := IsWow64Result;
  end
  else
    // Function not implemented: can't be running on Wow64
    Result := False;
end;


leider bekomme ich folgenden fehler den ich nicht lösen kann:

Code: Alles auswählen

ugetwinversion.pas(169,21) Error: Incompatible types: got "Pointer" expected "<procedure variable type of function(LongWord,var LongBool):LongBool;StdCall>"
Zuletzt geändert von Bauer321 am Fr 26. Aug 2011, 18:05, insgesamt 2-mal geändert.
www.mcpatcher.net | www.hoeper.me

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: überprüfen ob 64 oder 32 bit

Beitrag von MAC »

Aus welchen Grund brauchst du das ?
Musst du das zur Laufzeit wissen , oder reichen auch Compilerschalter ?

In Welcher Zeile tritt der Fehler auf?

mögliche Lösung:
a) Achtung, Pointer sind bööse, und zwar weil man nicht was von welchem Typ ein Pointer ist, also wenn du dir sicher bist das dein Pointer von dem Typ "procedure variable type of function(LongWord,var LongBool):LongBool;StdCall" ist,
dann würde ich das folgedermaßen machen:

Code: Alles auswählen

//in den type Teil
type
   zukonvertierenin = procedure variable type of function(LongWord,var LongBool):LongBool;StdCall;
 
//im Programm
zukonvertierenin(DeinPointerstehtHier)


Und Lazarus sieht den Pointer als funktion an.
Wenn das keine Seien sollte könntest du nen bösen Error bekommen :D

Code: Alles auswählen

Signatur := nil;

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: überprüfen ob 64 oder 32 bit

Beitrag von carli »

Code: Alles auswählen

{$ifdef CPU64}

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: überprüfen ob 64 oder 32 bit

Beitrag von Bauer321 »

ja okay also was macht der schalter von dir(carli) jetzt genau? der führt doch einfach wenn 64 bit ist den code aus und sonst nicht oder? oder hängt das davon ab ob ich 64 bit oder 32 bit compiliere?
www.mcpatcher.net | www.hoeper.me

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: überprüfen ob 64 oder 32 bit

Beitrag von Teekeks »

Der Schalter hängt davon ab wofür (also ob 64 oder 32 Bit) du Kompilierst.

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: überprüfen ob 64 oder 32 bit

Beitrag von Bauer321 »

hmm ne also das reicht mir nicht es soll eine 32bit version geben für alle das weniger arbeit außerdem benutzerfreundlicher. nur wäre um z.B. den Java Pfad zu analysieren eine 64/32 bit erkennung praktisch
hab oben nochmal nen comment bei der fehlerhaften zeile gemacht
www.mcpatcher.net | www.hoeper.me

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: überprüfen ob 64 oder 32 bit

Beitrag von MAC »

die Zeile hätte ich vermutet, hast du denn mal

Code: Alles auswählen

IsWow64Process := TIsWow64Process(Windows.GetProcAddress( // in dieser Zeile ist der Fehler!
    Windows.GetModuleHandle('kernel32'), 'IsWow64Process'));


versucht ?

Code: Alles auswählen

Signatur := nil;

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: überprüfen ob 64 oder 32 bit

Beitrag von Bauer321 »

danke das geht
www.mcpatcher.net | www.hoeper.me

GrosseAffe
Beiträge: 5
Registriert: Mo 27. Jun 2011, 15:14

Re: überprüfen ob 64 oder 32 bit (gelöst)

Beitrag von GrosseAffe »


Antworten