Delphi XE6 DLL: Unerwünschter Export: TMethodImplementationIntercept

9

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?

    
karliwson 13.07.2014, 01:12
quelle

1 Antwort

4

Der Code in der System.Rtti -Einheit sieht folgendermaßen aus:

%Vor%

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:

  1. Verwenden Sie eine ältere Version von Delphi.
  2. Fügen Sie System.Rtti nicht in Ihre Bibliothek ein.
  3. Verwenden Sie eine modifizierte Version von System.Rtti , die die Funktion nicht exportiert.
  4. Ändern Sie die DLL, nachdem sie erstellt wurde, um die Funktion aus der PE-Exporttabelle zu entfernen.

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.

    
David Heffernan 13.07.2014 16:00
quelle

Tags und Links