AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Vertändnisfrage zu 'Meldungen'

Ein Thema von Delbor · begonnen am 6. Jun 2018 · letzter Beitrag vom 6. Jun 2018
Antwort Antwort
Seite 1 von 2  1 2   
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.077 Beiträge
 
Delphi 10.4 Sydney
 
#1

Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 10:24
Hi zusammen

Ich habe hier ein offensichtlich etwas älteres Programm (NikomsoftOCR), das zwar zu laufen scheint - soweit ich vorerst mitbekommen habe: Scannen läuft einwandfrei, nur beim anschliessenden OCR wird am Ende eine Fehlermeldung erzeugt - aber nach dem Kompilieren 3 Meldungen nach folgendem Muster hinterlässt:
Zitat:
[dcc32 Hinweis] fmMainU.pas(383): H2443 Inline-Funktion 'MessageDlg' wurde nicht expandiert, weil Unit 'System.UITypes' in der USES-Liste nicht angegeben ist
Von F1 ist offensichtlich keine Hilfe zu erwarten (Keine Hilfe für dcc32 gefunden.)
Wissen wollte ich von ihr eigentlich, was 'nicht expandiert' bedeutet.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.745 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 10:25
Suche doch mal mit der Internet-Suchmaschine deines Vertrauens nach "H2443"
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.077 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 10:55
Hi Günther

Danke für den ¨Tip! Da war ich ja gar nicht soweit weg.
Zitat:
Anmerkung: Sie können diese Hinweise deaktivieren, indem Sie das Inlining in Projekt > Optionen > Compilieren ausschalten.
Ob dies einfach so eine gute Idee ist, wage ich allerdings zu bezweifeln. Zumindest sollte man dies nicht generell tun, denke ich.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.745 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 10:59
Die Meldung sagt dir doch schon was du tun kannst:
  • Du hast eine Routine machWas() in Unit "B" und rufst diese aus Unit "A" auf
  • Die Implementierung deiner Routine machWas() benutzt in Kram aus einer Unit "C"
  • Du musst nun in deiner Unit "A" ebendiese Unit "C" in deine "uses"-Anweisung aufnehmen

So bekommt man den Tag auch rum.
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.077 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 11:07
Hi Günther

Ja, klar. Das ist der einfachste Weg, die Meldung wegzukriegen. Ich wollte sie aber nicht einfach weghaben, sondern auch wissen, was sie bedeutet.
Denn ganz so harmlos, wie die Anmerkung vermuten lassen kann, ist die wohl nicht.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Sailor

Registriert seit: 20. Jul 2008
Ort: Balaton
106 Beiträge
 
Delphi 2010 Professional
 
#6

AW: Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 11:20
IIRC bewirkt INLINE, daß die Routine nicht wie üblich aufgerufen wird,sondern der entsprechende Maschinencode während der Generierung direkt im Programm angeordnet wird. Sollte also höchstens Auswirkungen auf die Ausführungsgeschwindigkeit haben.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.819 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 11:28
Ich wollte sie aber nicht einfach weghaben, sondern auch wissen, was sie bedeutet.
Etwas ausführlicher: MessageDlg ist in Vcl.Dialogs als inline deklariert. In diesem Fall erzeugt der Compiler keinen Funktionsaufruf, sondern fügt den Code der Funktion direkt ein. Damit das gelingt, muss dieser Code natürlich auch an dieser Stelle compilierbar sein.

Nun sind einige der Typdeklarationen in Vcl.Dialogs einfach nur Aliase zu Typen aus System.UITypes:
Delphi-Quellcode:
type

  TMsgDlgType = System.UITypes.TMsgDlgType;
  {$NODEFINE TMsgDlgType}

  TMsgDlgBtn = System.UITypes.TMsgDlgBtn;
  {$NODEFINE TMsgDlgBtn}
  TMsgDlgButtons = System.UITypes.TMsgDlgButtons;
  {$NODEFINE TMsgDlgButtons}
Aus nicht näher ersichtlichen Gründen braucht der Compiler im Falle einer Inline-Auflösung Zugriff auf die originalen Deklarationen. Deswegen muss in deiner Unit die System.UITypes aufgeführt sein.

Machst du das nicht, wird das inline nicht aufgelöst und ein regulärer Call erzeugt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.731 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 11:36
So in etwa.
Man kann es sich fast wie die Makros aus anderen Programmiersprachen vorstellen.
Der "Inhalt" dieser Funktion/Prozedur wird an der "Aufrufstelle" eingefügt, an statt einem CALL/Aufruf zu dieser Funktion.
> Es entfällt also ein Sprung, was bei "kurzen" Funktionen den Programmablauf verbessern kann.
(dass dieses "Einfügen" vom Compiler oft/meistens nicht wirklich optimal vorgenommen wird und bei Assembler-Funktionen praktisch garnicht gut geschehen kann, das ist eine andere Angelegenheit)

Und hier sagt der Compiler einfach nur
Zitat:
ich habe an der Stelle keinen Zugriff auf alles, was diese Funktion benötigt und ignoriere daher das INLINE.


PS: Was sich garnicht auflösen lässt, wäre z.B. ein Zugriff auf eine Funktion, globale Variable oder einen Typ, welcher in der Implementation der anderen Unit deklariert wurde.
> Hier geht nur INLINE weglassen oder diesen Teil ins Interface verschieben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
658 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#9

AW: Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 12:18
Warum aber eine Routine wie MessageDlg inline deklariert wurde erschließt sich mir nicht wirklich.
Inline macht eigentlich nur Sinn wenn die Abarbeitung sich dann "messbar" auf die Ausführungsgeschwindigkeit auswirkt.
Ich bezweifle das für eine Dialogbox.........
Fritz Westermann
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.077 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 12:34
Hi zusammen

Vielen Dank für eure aufschlussreichen Antworten!

@Fritzew
Zitat:
Ich bezweifle das für eine Dialogbox.........
Andrerseits - wenn ich sehe, wielange andere Fenster (nicht unbedingt Delphi) brauchen, um sich aufzubauen... Ob das damit zusammenhängt, weiss ich nicht wirklich, aber ich ahlte es nicht für ausgeschlossen, dass sich das beim Threadmanagment von Windows bemerkbar macht.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf