2015-05-26 11 views
6

Ich muss mein Projekt mit einer geänderten VCL-Einheit kompilieren. Ich benutze Delphi XE8. Ich habe Vcl.StdCtrls.pas von D: \ Programme (x86) \ Embarcadero \ Studio \ 16.0 \ source \ vcl in meinen Projektordner kopiert, in dem meine .dpr-Datei gespeichert ist, dann habe ich meine Kopie von Vcl.StdCtrls.pas geändert. Ich habe diese Einheit auch zum Projektbaum hinzugefügt. Das Problem ist, dass mit Delphi XE8 eine solche Methode der Neukompilierung von VCL-Einheiten nicht mehr funktioniert. Ich habe einen offensichtlichen Syntaxfehler in meiner modifizierten Vcl.StdCtrls.pas-Einheit eingefügt. Der Compiler meldet den Fehler nicht, was bedeutet, dass er die Datei nicht einmal überprüft. Ich mache immer einen kompletten Build Shift + F9. Ich habe eine ähnliche Frage gefunden How to recompile a specific unit from the VCL? aber wie ich schon sagte, es funktioniert nicht mehr, nicht für Delphi XE8.Geänderte VCL-Einheit neu kompilieren

Auch die modifizierte Einheit auf meiner uses-Liste in .dpr Datei:

uses 
    Vcl.StdCtrls in 'D:\Dev\MYPROJECT\Vcl.StdCtrls.pas', 
    ... 

// es nicht

+0

Ich glaube einfach nicht, dass dies wahr ist. –

+1

Es lohnt sich zu fragen, warum Sie dies tun möchten. Es ist durchaus möglich, dass das grundlegende Problem, das Sie zu lösen versuchen, weniger empfindlich ist. –

+0

... zum Beispiel Klasse interposing ... – TLama

Antwort

7

hilft Dies scheint ein Fehler zu sein. Ich nehme an, dass Sie Laufzeitpakete verwenden. In XE7 wird ein solches Projekt nicht kompiliert - was das richtige Verhalten ist. In XE8 kompiliert es, offenbar mit dem VCL-Laufzeitpaket und ignoriert Ihre modifizierte Einheit.

Edit:

Beachten Sie, dass auch in früheren Versionen von Delphi, eine VCL-Einheit zu modifizieren, während der Laufzeit-Pakete mit noch würde erfordern Sie die geänderten Pakete und deren Abhängigkeiten rekombinieren (in diesem Fall, vcl und rtl). Mit anderen Worten, Sie können nicht einfach eine modifizierte Einheit verwenden, während Sie mit einem Laufzeitpaket verknüpfen, das eine andere Kopie dieser Einheit enthält. Unit-Namen müssen innerhalb des gesamten Projektumfangs eindeutig sein, einschließlich der Haupt-Executable und aller verknüpften Laufzeit-Packages.

die Lösung für Sie ist also entweder:

  1. nicht Runtime-Pakete verwenden, oder
  2. Repackage alle erforderlichen Einheiten in die eigene Runtime-Pakete und Link gegen sie statt von Embarcadero bereitgestellten rtl, vcl usw.
+0

Vermutlich nicht kompilieren an dem Punkt, wo der Einheitenname angetroffen wird, weil diese Einheit bereits in einem abhängigen Paket ist. Selbst die richtige Einheit würde nicht kompilieren. –

+0

@DavidHeffernan Ja, das würde ich auch annehmen. –

+1

Es ist wahrscheinlich wert, auf den Fragesteller hinzuweisen, dass Sie eine Einheit nicht aus einem Paket ersetzen können, ohne das Paket neu zu erstellen. Was der Fragesteller versucht hat, war nie möglich. –