![]() |
Funktion vom Linker entfernt..
Hallo,
kann mir wer sagen warum diese Funktion vom Linker entfernt wurde? Ich bekomm das wenn ich im Debugmodus mit der Maus über die Property geh die diese Funktion als read-Funktion hat.
Delphi-Quellcode:
Irgendwie kapier ich nich was der da von mir sonst noch will... :gruebel:
function TdmTabellen.GetComboBoxWert: Integer;
begin Result:=-1; if Assigned(FComboBox)then Result:=FComboBox.ItemIndex; end; MfG :angel: |
Re: Funktion vom Linker entfernt..
Weil du sie nirgendwo verwendet hast?
|
Re: Funktion vom Linker entfernt..
gott bin ich blöd :wall:
|
Re: Funktion vom Linker entfernt..
Kann man das generell ausstellen?
Ich habe hier:
Delphi-Quellcode:
Funktioniert zwar als Quelltext, wenn ich "FormatDateTime('c', dt)" aber bei Überwachte Ausdrücke reinschreibe erscheint auch vor/nach der mit x markierten Zeile die Fehlermeldung (als Ergebnis in dieser Zeile bei Überwachte Ausdrücke): Die aufzurufende Funktion FormatDateTime wurde vom Linker entfernt. Wie kann man das verhindern / korrigieren? Ich bin nicht so toll im Kopfrechnen dass ich immer automatisch weiß, wie das menschenlesbare Datum eines TDateTime-Wertes ist...
var
t: string; dt: TDateTime; begin dt := 12345; t := FormatDateTime('c', dt); // x end; |
Re: Funktion vom Linker entfernt..
Moin Berens,
mach' doch irgendetwas mit dem t, z.B., über OutputDebugString wegschreiben. |
Re: Funktion vom Linker entfernt..
Einfach die Optimierung in den Compiler-Optionen des Projektes ausstellen und Projekt komplett neu erstellen.
|
Re: Funktion vom Linker entfernt..
Muetze1: Ich habe nun bei den Compiler-Optionen die Code-Optimierung deaktiviert und zusätzlich die betroffene Unit mit {$O-}
gekennzeichnet. Das Ergebnis bleibt das gleiche. Christian Seehase: OutputDebugString bringt ja afaik nur was, wenn ich an einer Stelle schon genau weiß, in welcher Form ich welche Variable auslesen muss. Da bei einem Fehler das Problem ja über den gesamten Quelltext verteilt sein kann, ist das so leider nicht praktikabel. Ich gehe im Moment ja schon den Umweg über das Zwischenspeichern des Datums in t als String und lese diesen dann aus, aber dann auf einmal brauche ich zum Vergleich wieder ein anderes Datum, und das System ins hinne... So geht das also leider nicht :( Noch andere Ideen? |
Re: Funktion vom Linker entfernt..
Zitat:
Zitat:
|
Re: Funktion vom Linker entfernt..
Was meinst du mit komplett neu erstellen?
Ich habe -Projekt --> frmMain erzeugen --> Alle Projekte erstellen --> Alle Projekte compilieren durchgeführt. Muss ich noch etwas beachten? |
Re: Funktion vom Linker entfernt..
Der optimierende Linker ist AFAIK keine Option sondern immer eingeschaltet.
|
AW: Funktion vom Linker entfernt..
Generationen später.
Ich habe immer noch das gleiche Problem. Gibt es generell ein "Linker, entferne nichts ungenutztes!", das man irgendwo einbauen kann? Mit Gewalt irgendwo gezwungene Aufrufe für irgendwas einzubauen (meinetwegen umgeben von einem "IFDEF DEBUG"-Block) ist ja irgendwie keine schöne Lösung. |
AW: Funktion vom Linker entfernt..
Aktuell wird nichts mehr entfernt.
es ist eher so, daß man jetzt (mindestens seit XE3) dem Compiler explizit sagen muß, daß er ungenutzte Methoden weglassen soll. (vorallem bei Published-Methoden, aber ich weiß jetzt nicht, ob das auch alle anderen Methoden betrifft) Drum werden die EXEn auch immer größer. (und wegen der RTTI) Delphi geht quasi davon aus, daß man die Funktionen dennoch nutzen und z.B. indirekt via RTTI aufrufen könnte, selbst wenn sie nirgendwo explizit aufgerufen wird. Aber wozu soll denn ungenutztes Zeug mit in die EXE gelinkt werden, wen du es eh nicht verwendest? |
AW: Funktion vom Linker entfernt..
Ganz konkretes Beispiel: Wenn ich im Debugger in meiner DEBUG-Fassung eine Interface-Referenz nehmen möchte und sie auf eine Klassen-Referenz casten möchte. Dann kann ich das nicht, denn "SafeIntfAsClass wurde vom Linker entfernt".
Nun muss ich in der Debug-Fassung meines Projekts einmal künstlich so einen Cast einbauen damit der Linker es nicht entfernt. Mit der Zeit treffe ich immer wieder auf andere Aufrufe die beim Debuggen nützlich sind, aber entfernt wurden. Daher meine Frage: Kann ich nicht irgendwo an (bislang nicht gefundenen Linker-Optionen) einstellen, dass er bitte einfach alles aus den inkludierten Units mitnimmt und nichts entfernt? |
AW: Funktion vom Linker entfernt..
Diese Methoden einfach mal published zu machen hilft nicht?
|
AW: Funktion vom Linker entfernt..
Liste der Anhänge anzeigen (Anzahl: 3)
Ich erkläre es mal andersherum.
Gegeben sei folgendes:
Delphi-Quellcode:
Bild 1: Ich habe eine
IMyInterface = interface
// end; TMyClass2 = class(TInterfacedObject, IMyInterface) protected var someInternalStuff: Single; end;
Delphi-Quellcode:
-Variable. Der Compiler sagt mir direkt, dass sich dahinter eine
IMyInterface
Delphi-Quellcode:
-Instanz verbirgt. Soweit alles super. :thumb:
TMyClass2
Bild 2: Jetzt möchte ich die Variable auf
Delphi-Quellcode:
casten um zu sehen, was denn
TMyClass2
Delphi-Quellcode:
für einen Wert hat. Da ich so etwas im Quelltext nie gemacht habe, hat der Linker das entfernt.
someInternalStuff
Bild 3: Die Lösung: Um das zu umgehen muss ich halt im Quelltext einfach mal ein Interface zu einem Objekt casten. Dann geht es. Was ich suche: Eine Alternative dazu. Der Fall "Interface zu Objekt" ist ja nur ein Beispiel. Ich würde gerne vermeiden, immer Aufrufe zu sammeln, die ich in der Debug-Fassung einmal künstlich aufrufen muss. Gibt es da einen Weg? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:42 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