AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Totale/ Verfügbaren Ram Größe ermitteln... (gelöst)
Thema durchsuchen
Ansicht
Themen-Optionen

Totale/ Verfügbaren Ram Größe ermitteln... (gelöst)

Ein Thema von Corpsman · begonnen am 6. Sep 2008 · letzter Beitrag vom 7. Sep 2008
Antwort Antwort
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.124 Beiträge
 
Delphi 11 Alexandria
 
#1

Re: Totale/ Verfügbaren Ram Größe ermitteln...

  Alt 6. Sep 2008, 23:09
Moin Corpsman,

ich habe das mal eben, quick and dirty, übersetzt:

Delphi-Quellcode:
type
  DWORDLONG = LONGLONG;
  _MEMORYSTATUSEX = packed record // packed, damit keine Speicherlöcher entstehen
    dwLength : DWORD;
    dwMemoryLoad : DWORD;
    ullTotalPhys : DWORDLONG;
    ullAvailPhys : DWORDLONG;
    ullTotalPageFile : DWORDLONG;
    ullAvailPageFile : DWORDLONG;
    ullTotalVirtual : DWORDLONG;
    ullAvailVirtual : DWORDLONG;
    ullAvailExtendedVirtual : DWORDLONG;
  end;

  TMemoryStatusEx = _MEMORYSTATUSEX;

// stdcall, weil die meisten API-Funktionen diese Aufrufkonvention verwenden
procedure GlobalMemoryStatusEx(var ABuffer : _MEMORYSTATUSEX); stdcall; external 'kernel32.dll';


// Anwendung

var
  ms : TMemoryStatusEx;

begin
  ms.dwLength := SizeOf(ms); // Bei dieser Funktion muss die Länge gesetzt werden
  GlobalMemoryStatusEx(ms);
  ShowMessage(IntToStr(ms.ullTotalPhys));
end;
So ganz gefällt mir das Ganze nicht, aber das liegt in erster Linie daran, dass ich, normaler Weise, nicht die borland-spezifische Übersetzung für Parameter verwende, wie hier, aber es ist leichter in der Anwendung, da man nicht extra Speicher reservieren, und später wieder freigeben muss.
Ein weiterer Punkt, der nicht ganz sauber ist, ist die Deklaration von DWORDLONG. LONGLONG ist als Int64 deklariert, ein DWORD sollte allerdings eigentlich ohne Vorzeichen sein. Bis wir über Rechner verfügen können, bei denen das eine Rolle spielt, haben wir wohl auch ein Delphi mit 64-Bit-Cardinal
Ausserdem könnte man die Funktion auch dynamisch importieren, und nicht statisch, wie hier, was den Vorteil hätte, vorher zu prüfen, ob die Funktion überhaupt verfügbar ist, und sie ggf. wegzulassen.
Bei statischem Import startet das Programm gar nicht erst, wenn die Funktion nicht vorhanden ist.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:29 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