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

Für Fragen von Einsteigern und Programmieranfängern...

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

Beitragvon Bauer321 » 24. Aug 2011, 17:16 überprüfen ob 64 oder 32 bit (gelöst)

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 26. Aug 2011, 17:05, insgesamt 2-mal geändert.
www.mcpatcher.net | www.hoeper.me
Bauer321
 
Beiträge: 465
Registriert: 21. Aug 2010, 20:30
Wohnort: nahe Bremen
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit) | 
CPU-Target: 64-Bit
Nach oben

Beitragvon MAC » 24. Aug 2011, 20:32 Re: überprüfen ob 64 oder 32 bit

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;
MAC
 
Beiträge: 770
Registriert: 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2) | 
CPU-Target: 32Bit
Nach oben

Beitragvon carli » 24. Aug 2011, 20:59 Re: überprüfen ob 64 oder 32 bit

Code: Alles auswählen
{$ifdef CPU64}
carli
 
Beiträge: 660
Registriert: 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2 | 
CPU-Target: 64Bit
Nach oben

Beitragvon Bauer321 » 24. Aug 2011, 21:07 Re: überprüfen ob 64 oder 32 bit

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
Bauer321
 
Beiträge: 465
Registriert: 21. Aug 2010, 20:30
Wohnort: nahe Bremen
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit) | 
CPU-Target: 64-Bit
Nach oben

Beitragvon Teekeks » 24. Aug 2011, 21:27 Re: überprüfen ob 64 oder 32 bit

Der Schalter hängt davon ab wofür (also ob 64 oder 32 Bit) du Kompilierst.
Teekeks
 
Beiträge: 359
Registriert: 27. Mai 2009, 19:54
Wohnort: Cottbus
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2) | 
CPU-Target: x86
Nach oben

Beitragvon Bauer321 » 24. Aug 2011, 21:50 Re: überprüfen ob 64 oder 32 bit

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
Bauer321
 
Beiträge: 465
Registriert: 21. Aug 2010, 20:30
Wohnort: nahe Bremen
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit) | 
CPU-Target: 64-Bit
Nach oben

Beitragvon MAC » 24. Aug 2011, 21:59 Re: überprüfen ob 64 oder 32 bit

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;
MAC
 
Beiträge: 770
Registriert: 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2) | 
CPU-Target: 32Bit
Nach oben

Beitragvon Bauer321 » 25. Aug 2011, 16:36 Re: überprüfen ob 64 oder 32 bit

danke das geht
www.mcpatcher.net | www.hoeper.me
Bauer321
 
Beiträge: 465
Registriert: 21. Aug 2010, 20:30
Wohnort: nahe Bremen
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit) | 
CPU-Target: 64-Bit
Nach oben

Beitragvon GrosseAffe » 6. Sep 2011, 09:28 Re: überprüfen ob 64 oder 32 bit (gelöst)

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

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 4 Gäste

porpoises-institution
accuracy-worried