Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Int64 und Delphi 3 (https://www.delphipraxis.net/58177-int64-und-delphi-3-a.html)

Lannes 2. Dez 2005 18:48

Re: Int64 und Delphi 3
 
Hallo,
Zitat:

Zitat von Ati
@Chegga
Das funktioniert nicht mit Festplatten >2GB

das kann auch nicht, in Delphi 3 gibt DiskSize einen Integer zurück:
Delphi-Quellcode:
function DiskSize(Drive: Byte): Integer;
und GetDiskFreeSpaceEx wird mit Int64 unter Delphi 3 so auch nicht funktionieren,
da es so deklariert ist:
Delphi-Quellcode:
function GetDiskFreeSpaceEx(lpDirectoryName: PChar;
  var lpFreeBytesAvailableToCaller, lpTotalNumberOfBytes: Integer;
  lpTotalNumberOfFreeBytes: PInteger): BOOL; stdcall;
@Ati:
Hast Du das Programm in der Zip (http://www.efg2.com/Lab/Library/Delp...paceKludge.ZIP) aus meinem Beitrag ausprobiert?
Es liefert richtige Werte, zumindest bei XP.

Das tut der folgende Code, den ich so ähnlich unter XP und NT nutze, auch:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var SectorsPerCluster,
    BytesPerSector,
    NumberOfFreeClusters,
    TotalNumberOfClusters : DWORD;
    Cluster, Gesamt, Frei: double;
begin
  GetDiskFreeSpace(PChar('C:\'), SectorsPerCluster, BytesPerSector, NumberOfFreeClusters, TotalNumberOfClusters);
  Cluster := SectorsPerCluster * BytesPerSector;
  Gesamt := Cluster * TotalNumberOfClusters;
  Frei := Cluster * NumberOfFreeClusters;
  showmessage('Freier Speicherplatz: '+FormatFloat('#,##0',Frei));
  showmessage('Gesamte Speichergröße: '+FormatFloat('#,##0',Gesamt));
end;
Das sagt Microsoft dazu:
GetDiskFreeSpace

Ati 2. Dez 2005 19:50

Re: Int64 und Delphi 3
 
@Flocke
Dein Code funktioniert so nicht. Delphi meckert bei LARGE_INTEGER (undefinierter Bezeichner). Auch einändern in TLargeInteger bringt nichts. Auch eine Fehlermeldung:
"Die Typen der tatsächlichen und formalen Var-Parametermüssen übereinstimmen"

@Lannes
Dein Code funktioniert einwandfrei. Vielen Dank werde mir den Code nochmal genauer anschauen um ihn auch wirklich zu verstehen!!!!

Ati

Flocke 2. Dez 2005 19:58

Re: Int64 und Delphi 3
 
Zitat:

Zitat von Ati
@Flocke
Dein Code funktioniert so nicht. Delphi meckert bei LARGE_INTEGER (undefinierter Bezeichner). Auch einändern in TLargeInteger bringt nichts. Auch eine Fehlermeldung:
"Die Typen der tatsächlichen und formalen Var-Parametermüssen übereinstimmen"

Hab (wie gesagt) kein Delphi 3.

Wenn die Deklaration von Lannes richtig ist, dann müsstest du es so schreiben können:

Delphi-Quellcode:
var
  iFreeBytesAvailable, iTotalNumberOfBytes, iTotalNumberOfFreeBytes: LARGE_INTEGER;
  xFreeBytesAvailable, xTotalNumberOfBytes, xTotalNumberOfFreeBytes: Extended;
begin
  GetDiskFreeSpaceEx('C:', PInteger(@iFreeBytesAvailable)^, PInteger(@iTotalNumberOfBytes)^, PInteger(@iTotalNumberOfFreeBytes));
  xFreeBytesAvailable := LoadInt64(iFreeBytesAvailable);
  ...
end;
Die Variante von Lannes wird aber dasselbe ausrechnen.

Chegga 2. Dez 2005 21:19

Re: Int64 und Delphi 3
 
Hi,

Zitat:

Zitat von Ati
Das funktioniert nicht mit Festplatten >2GB

:shock:
In Delphi 3 scheint das wirklich nicht zu klappen!
Wenn ich meinen Code mit Delphi 7 mache,
klappt alles ohne Probleme. :wink:

MfG Marc


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:55 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz