Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Standardfunktionen eines 2005er Projekts funkt.nicht in 2006 (https://www.delphipraxis.net/69679-standardfunktionen-eines-2005er-projekts-funkt-nicht-2006-a.html)

freejay 18. Mai 2006 14:44


Standardfunktionen eines 2005er Projekts funkt.nicht in 2006
 
Hallo zusammen,

ich habe ein eigenwilliges Problem: Ein bestimmtes Projekt, dass ich unter Delphi 2005 erstellt habe, möchte ich jetzt in Delphi 2006 weiterentwickeln. Aber dort funktionieren plötzlich einige Standardfunktionen nicht mehr! Konkret: FindFirst und GetDiskFreeSpaceEx.

FindFirst konnte ich durch Verschieben der Units der Uses-Klausel im Implementation-Abschnitt in den Interface-Abschnitt wieder zum Laufen bringen.

Aber an GetDiskFreeSpaceEx beiss ich mir noch die Zähne aus...

Gibt es bei der Reihenfolge und Position der Units etwas generell zu beachten und was ist in Delphi 2006 anders als in Delphi 2005?

--------------------------------------------------------
Hier meine momentane Uses-Klausel:

Delphi-Quellcode:
interface
uses   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   StdCtrls, ExtCtrls, TeEngine, Series, TeeProcs, Chart, Gauges, TeeFunci,
   ComCtrls, myFunctions, activeX, shlobj;
In "myFunctions":

Delphi-Quellcode:
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, DAO, Grids, Dialogs, StdCtrls,
  Forms, Controls, DBGrids, ShellAPI, ActnMenus, ComCtrls, ADODB, Graphics, RichEdit;
...
implementation
uses StrUtils, ComObj, Clipbrd, CommCtrl, Types, DateUtils;

RavenIV 18. Mai 2006 14:54

Re: Standardfunktionen eines 2005er Projekts funkt.nicht in
 
Zitat:

Zitat von freejay
ich habe ein eigenwilliges Problem: Ein bestimmtes Projekt, dass ich unter Delphi 2005 erstellt habe, möchte ich jetzt in Delphi 2006 weiterentwickeln. Aber dort funktionieren plötzlich einige Standardfunktionen nicht mehr! Konkret: FindFirst und GetDiskFreeSpaceEx.

als erstes würde ich die Hilfe für die Funktionen in beiden Delphi-Versionen abgleichen.
Vielleicht haben sich die parameter geändert.

ich kenne das noch von GetDiskFree (oder so ähnlich) bei D3 und D5.
In D3 war der Returnwert ein Integer, bei D5 war es dann Int64.

Zitat:

Zitat von freejay
FindFirst konnte ich durch Verschieben der Units der Uses-Klausel im Implementation-Abschnitt in den Interface-Abschnitt wieder zum Laufen bringen.

ich dacht immer, es sei egal, in welcher Reihenfolge die Units eingetragen werden.
OK, einige müssen an erster Stelle stehen, aber sonst sollte es egal sein.

Bernhard Geyer 18. Mai 2006 14:54

Re: Standardfunktionen eines 2005er Projekts funkt.nicht in
 
Welche Fehlermeldung bekommst Du?

Ich vermute mal das in einer geuseden Unit es ebenfalls ein FindFirst gibt welche nun versucht wird zu ziehen.
Durch voranstellen des Unitsnamens bekommst Du immer deine gewünschte Funktion:

Z.B.
Delphi-Quellcode:
SysUtils.FindFirst(...)
verwendet immer die FindFirst-Funktion egal in wieviel Units eine FindFirst-Funktion definiert ist und an welcher Stelle SysUtils in der Uses-Anweisung definiert ist.

JamesTKirk 18. Mai 2006 15:26

Re: Standardfunktionen eines 2005er Projekts funkt.nicht in
 
Also bei mir funzt die GetDiskFreeSpaceEx (bis auf eine Fehlermeldung beim Schließen... :gruebel: ). Es gibt allerdings zwei Stück davon: eine in der Windows und eine in der SysUtils Unit. Beide unterscheiden sich ein klein wenig... :roll:

freejay 18. Mai 2006 16:25

Re: Standardfunktionen eines 2005er Projekts funkt.nicht in
 
Zitat:

Zitat von Bernhard Geyer
Welche Fehlermeldung bekommst Du?

Das ist ja das verrückte: Ich bekomme gar keine Fehlermeldung! Im folgenden IF war die Bedingung immer false, obwohl der Pfad und die Datei existieren:

Delphi-Quellcode:
if 0 <> FindFirst(SourceLW + 'ACPro_Local.mdb',faAnyFile,mySearchRec) then
Nachdem ich die Units in den Interface-Abschnitt verschoben habe ist die gleiche Bedingung jetzt false!

Beim GetDiskFreeSpaceEx liefert folgender Code für den freien Speicher (iFrei) immer 0 bzw. der vorherige Wert wird nicht geändert. Es gibt auch keine Fehlermeldung!

Delphi-Quellcode:
function zuWenigSpeicher(): boolean;
var
   iFrei : Integer;
   Frei : Int64;
   Total: Int64;
   TotalFree: PLargeInteger;
    sLW: string;
begin
   Result := False;
    Frei := 0;
    Total := 0;

   GetMem(TotalFree,4);
    sLW := sInstallationsPfad[1] + ':\' + #0;
   GetDiskFreeSpaceEx(@sLW[1],Frei, Total, TotalFree);
   iFrei := Frei div (1024*1024);
   FreeMem(TotalFree);
...

Zitat:

Zitat von Bernhard Geyer
Delphi-Quellcode:
SysUtils.FindFirst(...)

Das habe ich auch versucht: Gebracht hat's aber nichts.


Das Problem muss irgendwie mit den Units activex und/oder shlobj zutun haben!

Noch irgendwelche Ideen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 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