Wenn Sie eine DLL in Delphi XE6 kompilieren, wird automatisch die Funktion TMethodImplementationIntercept
von System.Rtti.pas
exportiert. Ich habe versucht, einen Weg zu finden, diesen Export zu vermeiden, aber ich habe keine Konfigurations- oder Compiler-Direktive gefunden, die das Problem lösen könnte.
Die System.rtti-Einheit ist fast unmöglich zu vermeiden, weil sie von fast allem in Delphi indirekt verwendet wird.
Gibt es eine Möglichkeit zu vermeiden, diese Funktion beim Erstellen einer DLL in XE6 zu exportieren?
Der Code in der System.Rtti
-Einheit sieht folgendermaßen aus:
Diese Funktion und die exports
-Direktive wurden in XE5 hinzugefügt.
Gibt es eine Möglichkeit zu vermeiden, diese Funktion beim Erstellen einer DLL in XE6 zu exportieren?
Wenn Ihre Bibliothek die System.Rtti
-Einheit enthält, exportiert die DLL diese Funktion. Wenn Sie eine DLL erstellen möchten, die die Funktion nicht exportiert, kann ich die folgenden Optionen sehen:
System.Rtti
nicht in Ihre Bibliothek ein. System.Rtti
, die die Funktion nicht exportiert. Die ersten beiden Optionen scheinen mir nicht sehr ansprechend zu sein. Die dritte Option scheint attraktiv, aber ich denke, es könnte sich als schwierig erweisen, Arbeit zu leisten. Es scheint, dass dieser lang anhaltende Trick nicht mehr funktioniert. Ich war noch nicht in der Lage, eine RTL-Einheit neu zu kompilieren und zu vermeiden, dass das gefürchtete X mit einer anderen Version von Y Fehler kompiliert wurde.
Damit bleibt die letzte Option übrig. Wiederum nicht besonders attraktiv. Sie können sich gut entscheiden, es einfach aufzusaugen und diesen streunenden Export zu akzeptieren. Vielleicht könnte ein QC-Bericht Embarcadero etwas unter Druck setzen, um diese Entscheidung zu überdenken.
Für was es wert ist, sollte meiner Meinung nach kein Compiler-Bibliothekscode jemals unbedingt eine Funktion exportieren. Es sollte der Konsument der Bibliothek und nicht der Implementierer der Bibliothek sein, der diese Entscheidung trifft.
Tags und Links dll delphi rtti delphi-xe6