2011-01-29 16 views
19

私は、Delphiランタイムライブラリ(RTL)、system.pasなどのアンダーブルを修正していくつかの実験をすることを切望しています...可能かどうか?RTLを再コンパイルする - 可能であれば、どうすればよいですか?

「はい、正式なDelphiソースでは決して配布されなかったため、カスタムの.objファイルをアセンブラウィザードリに提供する必要があります。私と一緒に、私は知りたいです。

私はこの実験をDelphi 7でやりたいのですが、他のバージョンの情報はうまくいきます。石器時代以来デルファイと協力してきた会社と一緒になっていることは、特権の一つです。

(私は常に「NO!」の答えははっきりさと、それらのRTFM質問の一つであることが、これを考え出したが、何らかの理由でGoogleがそれを確認しません。)

答えて

19

他のユニットと同様にRTLを再コンパイルできます。

System.pasでは、コマンドラインコンパイラを使用する必要があります。例えば

、ここで働いバッチファイルの内容(いくつかのよく文書化されていないコマンドラインスイッチがあります)です:

del *.dcu /s 
"c:\program files\borland\delphi7\bin\dcc32.exe" -O+ -Q -M -Y -Z -$D+ System.pas 

これははSystem.pasとSysInit.pas(両方とも最低レベルのRTLファイル)を再コンパイルします。

再作成したdcuファイルを使用するには、更新されたdcuファイルを含むフォルダをIDEの最初の位置に配置する必要があります。たとえば、Delphi 7ではOption/Environment Options/Library、あなたのフォルダーを「迂回路」と「迂回路」の両方の欄に入れてください。

おそらく、Delphiのインストールディレクトリにある元の.dcuファイルを削除する価値があります。

ただし、ユニットの「インターフェース」部分を変更しないでください。そうでないと、RTL(または他社製のコンポーネント)の他の変更されていないユニットでコンパイルする際に問題が発生します。 「実装」の部分を変更したり、修正を適用したり、速度などのために一部を書き直したりすることはできますが、リンクエラーを避けるために「インターフェース」部分を変更しないでください。

変更している元の.pasファイルと.dcuファイルを必ずバックアップしてください。 RTLの変更によって回帰が追加されないように、自動コンパイルテストを行うことをお勧めします。

低レベルのRTL機能(主にSystem.pasとSysUtils.pas)の処理速度を向上させるために、Enhanced Run Time Libraryに対してこのようなRTL再コンパイルを行いました。 Delphi 7および2007用に設計されています。最新のDelphiバージョンでも、同じ原則を使用できます。

+0

ハード・エクスペリエンスによってバックアップされた明確な帳簿をありがとう。優れた! –

16

あなたが唯一のRTLを再コンパイルすることができますコマンドラインから。あなたのインストールのRTLソースディレクトリにmakefileがあるはずです。これは、インストールの "bin"フォルダにあるmake.exeコマンドラインユーティリティで使用するように設計されています。実験のために関連するソースを別の場所にコピーすることをお勧めします。 Systemユニットは、多くの関数が特定の名前を持っていて、特定のパラメータリストを持っていると期待しているコンパイラと密接に結合していることに注意しなければなりません。多くのRTL "ヘルパー"関数は、形式的に宣言されたパラメータを持っていませんが、パラメータがある種の方法で渡されることを期待しています。

もう1つ注意が必要なのは、特定のクラス、関数、またはタイプのインタフェース宣言を変更することです。既存のDCUファイルおよびコンポーネントとの重大な非互換性が発生する可能性があります。このため、含まれているRTLやサードパーティのコンポーネントとカスタム修正バージョンとのDCUファイルを混在させる際には、非常に注意する必要があります。私は、インターフェースの変更を掘り起こす鉱山のフィールドに入る前に、実装セクションの変更を行うことから始めてみることをお勧めします。

+0

私は、コンパイラがSystem.pasの宣言の順序に依存していたことを一度覚えています。私はRTLを再コンパイルしてから何年も前です。だから、これはTurbo Pascal/Delphi 1(16-bit)時代のことでした。 –

+2

RTLとは何ですか? System.pasとSysInit.pasについては、コマンドラインからのみ実行できます。しかし、他の上位レベルのユニット(Classes.pasやSysUtils.pasなど)では、IDEオプションで古いライブラリファイルを変更するだけで、IDEの代わりに別の.pasソースを提供するだけで、IDEから行うことができますデフォルトバージョン。 –

+0

Variants.pasは変更を加えなくても容易に再コンパイルできないことを覚えています。 – Torbins

関連する問題