![]() |
Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"
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? |
AW: Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"
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
Edit: Sehe gerade das es ein Hint und kein Warning ist, dann geht es wohl nur so abzuschalten
Delphi-Quellcode:
Rollo
{$HINTS OFF} // <-- muss um die aufrufende Fkt drumrum
procedure TForm1.Caller; begin RenameFile('a.text', 'b.text'); end; {$HINTS ON} |
AW: Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"
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. |
AW: Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"
Zitat:
|
AW: Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"
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... |
AW: Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"
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. |
AW: Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"
Zitat:
|
AW: Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"
Zitat:
|
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.
|
AW: Meldung "Inline-Funktion XZY nicht expandiert, weil Unit ABC nicht in uses Liste"
Ich denke nicht, dass der Geschwindigkeitsvorteil von inline bei Dateisystemoperationen eine Rolle spielt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:48 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 by Thomas Breitkreuz