AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"
Thema durchsuchen
Ansicht
Themen-Optionen

Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"

Ein Thema von Harry Stahl · begonnen am 5. Jan 2019 · letzter Beitrag vom 7. Jan 2019
Antwort Antwort
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.534 Beiträge
 
Delphi 11 Alexandria
 
#1

Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"

  Alt 5. Jan 2019, 13:11
Habe in einer FMX-Anwendung den Aufruf "RenameFile (OldName, NewName)" drin.

Der Compiler gibt den Hinweis aus: "[dcc32 Hinweis] Fnewmail.pas(3575): H2443 Inline-Funktion 'RenameFile' wurde nicht expandiert, weil Unit 'Winapi.Windows' in der USES-Liste nicht angegeben ist"

Verstehe nicht, was das soll.

Selbst wenn ich den Aufruf erweitere auf "System.sysUtils.renameFile (OldName, NewName);", um klar zu stellen, dass ich keinen Bezug zur Winapi haben möchte, kommt denno der Hinweis.

Wieso nur?

Und warum Winapi.windows in eine FMX-Anwendung hinzunehmen?

Macht für mich keinen Sinn.

Hat jemand eine Erklärung? Und was soll das "expandieren" eigentlich bedeuten?

Geändert von Harry Stahl ( 5. Jan 2019 um 13:25 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#2

AW: Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"

  Alt 5. Jan 2019, 14:13
Hallo Harry,

das kommt wohl daher das RenameFile inline deklariert ist,
und unter Windows

Delphi-Quellcode:
function RenameFile(const OldName, NewName: string): Boolean;
{$IFDEF MSWINDOWS}
begin
  Result := MoveFile(PChar(OldName), PChar(NewName));
end;
{$ENDIF MSWINDOWS}

auf eine WinApi Fkt. zugreift.
Ich würde die Meldung mal einfach ignorieren, oder besser
  1. die Warning an dieser Stelle abschalten,
    Zitat:
    {$WARN _name_of_warning_ OFF|ON|ERROR}
    oder
  2. noch einen eigenen Wrapper drumschreiben der dann dieses Warning immer abschaltet.

Edit:
Sehe gerade das es ein Hint und kein Warning ist, dann geht es wohl nur so abzuschalten
Delphi-Quellcode:
{$HINTS OFF}  // <-- muss um die aufrufende Fkt drumrum
procedure TForm1.Caller;
begin
    RenameFile('a.text', 'b.text');
end;
{$HINTS ON}
Rollo

Geändert von Rollo62 ( 5. Jan 2019 um 14:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.534 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"

  Alt 5. Jan 2019, 14:47
Das blöde daran war, dass der Aufruf von Renamefile in einer eigenen Funktion innerhalb einer Prozedur steckt. Da reicht es wohl nicht, die Funktion mit den Hints Off / Hints On Schaltern zu umschließen, sondern man muss dann die ganze Prozedur umschließen.

Aber ich habe jetzt noch einen Weg gefunden, der ohne die Meldung auskommt:

System.ioutils.TFile.Move(Oldname, ASaveFileName);

Da wird unter Windows am Ende zwar auch die gleiche Funktion aus der Winapi genommen, aber wenigstens unterbleibt die überflüssige Meldung.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#4

AW: Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"

  Alt 5. Jan 2019, 16:35
System.ioutils.TFile.Move(Oldname, ASaveFileName);

Da wird unter Windows am Ende zwar auch die gleiche Funktion aus der Winapi genommen, aber wenigstens unterbleibt die überflüssige Meldung.
... weil der Compiler diesen Aufruf nicht mehr zu Gesicht bekommt. Für Plattform-übergreifende Entwicklung sind ja eben genau die IOUtils gemacht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.534 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"

  Alt 5. Jan 2019, 16:45
Wobei nach meinem Verständnis eigentlich alle System.XXX (außer natürlich System.Win.XXX spezifische units) Plattform-neutral sein sollten.

Z.B. System.Threading, etc. nutze ich ja unter allen Plattformen, hätte man bei "System.sysUtils" eigentlich insofern auch erwarten können, dass die vollständig neutral ist und nicht bei einer spezifischen Funktion meckert, dass eine Winapi nicht eingebunden wäre...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#6

AW: Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"

  Alt 5. Jan 2019, 17:00
Ich hätte eher erwartet, daß für SysUtils.RenameFile so was wie "deprecated - use System.IOUtils.TFile.Move" kommt.

Aber: Das Inline hat für VCL-Entwickler immerhin noch einen kleinen Performance-Vorteil. Den müsste man für die FMX-Entwickler aufgeben. Andererseits können die aber ja auch gleich TFile.Move benutzen und alle sind zufrieden. Nicht in allen Fällen gibt es diesen Ausweg.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.534 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"

  Alt 5. Jan 2019, 17:04
Ich hätte eher erwartet, daß für SysUtils.RenameFile so was wie "deprecated - use System.IOUtils.TFile.Move" kommt.
Genau das wäre auch meine Erwartung gewesen... Na ja, sei es drum, Problem ist ja behoben...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#8

AW: Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"

  Alt 5. Jan 2019, 17:13
Genau das wäre auch meine Erwartung gewesen...
Mit dem "Aber" in meinem Post wollte ich eigentlich verdeutlichen, daß es durchaus sinnvoll sein kann, diese Funktion direkt zu verwenden, die Warnung zu beherzigen und die Winapi aufzunehmen. Wenn man tatsächlich nicht rein für Windows (VCL) entwickelt, kann man das ja immer noch durch ein IFDEF lösen. Ist halt umständlicher als TFile.Move zu verwenden, aber schneller (unter Windows). Deswegen hat sowohl das inline als auch die Warnung ihre Berechtigung.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
5. Jan 2019, 17:27
Dieses Thema wurde am "05. Jan 2019, 17:27 Uhr" von "Luckie" aus dem Forum "Sonstige Fragen zu Delphi" in das Forum "Object-Pascal / Delphi-Language" verschoben.
freimatz

Registriert seit: 20. Mai 2010
1.444 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"

  Alt 7. Jan 2019, 08:14
Ich denke nicht, dass der Geschwindigkeitsvorteil von inline bei Dateisystemoperationen eine Rolle spielt.
  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 21:40 Uhr.
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