AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vertändnisfrage zu 'Meldungen'

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

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 09: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
6.111 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 09: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.186 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 09: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
6.111 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 09: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.186 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 10: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
112 Beiträge
 
Delphi 2010 Professional
 
#6

AW: Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 10: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
11.034 Beiträge
 
Delphi 12 Athens
 
#7

AW: Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 10: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
freimatz

Registriert seit: 20. Mai 2010
1.385 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Vertändnisfrage zu 'Meldungen'

  Alt 6. Jun 2018, 12:59
Ich wollte sie aber nicht einfach weghaben, sondern auch wissen, was sie bedeutet.
Ich finde das eine gute und wichtige Einstellung.
  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 02:10 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