私はコードから単位がThe Tomes of Delphiに含まれてTDRecLstとTDSplyCmを使用しようとしているが、私はTDBasics.pasでコンパイルエラーを取得:「The Tomes of Delphi」のコードをコンパイルできないのはなぜですか?
私は同様のを取得しますTDStrRes.incでエラー:
何が問題なのですか?それを修正するにはどうすればよいですか?
The codeは、著者から入手可能です。
私はコードから単位がThe Tomes of Delphiに含まれてTDRecLstとTDSplyCmを使用しようとしているが、私はTDBasics.pasでコンパイルエラーを取得:「The Tomes of Delphi」のコードをコンパイルできないのはなぜですか?
私は同様のを取得しますTDStrRes.incでエラー:
何が問題なのですか?それを修正するにはどうすればよいですか?
The codeは、著者から入手可能です。
あなたは明らかにDelphi 6より新しいバージョンのDelphiを使用しています。2005年に更新されているにもかかわらず、その書籍のコードはそのバージョンまでしか検出しません。 TDDefine.incは、検出するバージョンに基づいていくつかのコンパイラシンボルを定義しますが、使用しているバージョンが認識できないものであれば、はシンボルと定義されています。コンパイラが次のようなコードに遭遇したときに、最終的に問題につながる。TDBasics.pas;
implementation
uses
{$IFDEF Delphi1}
WinTypes, WinProcs;
{$ENDIF}
{$IFDEF Delphi2Plus}
Windows;
{$ENDIF}
{$IFDEF Kylix1Plus}
Types, Libc;
{$ENDIF}
{$IFDEF Delphi1}
{$R TDStrRes.r16}
{$ENDIF}
{$IFDEF Delphi2Plus}
{$R TDStrRes.r32}
{$ENDIF}
{$IFDEF Kylix1Plus}
{$R TDStrRes.r32}
{$ENDIF}
const
UnitName = 'TDBasics';
Delphi1
、Delphi2Plus
、又はKylix1Plus
のいずれも定義されていないので、uses
句は空です。我々は、すべてのコンパイラディレクティブと非アクティブなコードブロックを無視すると、コンパイラは、最終的には、このようなコードを見て:
const
の代わりに識別子を期待して文句を言う理由です
implementation
uses
const
UnitName = 'TDBasics';
。
修正するには、TDDefine.incにあなたのバージョンのDelphiを認識させる必要があります。しかし、より簡単にを無視してください。すべてのバージョン検出コードと使用しているバージョンに適用されるすべての記号をハードコードしてください。 Delphi 6より古いバージョンを使用しない限り、すべてはすべてのバージョンに適用されます。
はTDDefine.pasに次のコードブロックを探す:残り$DEFINE
命令が無条件に処理されるように
{$IFDEF VER140}
{$DEFINE Delphi6}
{$DEFINE Delphi1Plus}
{$DEFINE Delphi2Plus}
{$DEFINE Delphi3Plus}
{$DEFINE Delphi4Plus}
{$DEFINE Delphi5Plus}
{$DEFINE Delphi6Plus}
{$DEFINE HasAssert}
{$ENDIF}
は、最初と最後の行を削除します。
ありがとうございます! {$ IFDEF VER150} {$ DEFINE Delphi7} {$ DEFINE Delphi1Plus} {$ DEFINE Delphi2Plus} {$ DEFINE Delphi3Plus} {$ DEFINE Delphi4Plus} {$ DEFINE Delphi5Plus} {追加する問題を解決するために$ DEFINE Delphi6Plus} {$ DEFINE HasAssert} {$ ENDIF} in TDDefine.inc(Delphi 7) – tbutton
しかし、Delphi XEまたはXE4に何を追加する必要がありますか? – tbutton
誰が気にしますか?本書のコードの残りの部分は、Delphiの追加バージョンをチェックすることはありません。なぜ、それらを検出するために行とコード行を追加する必要がありますか?本当に知っていなければ、[Delphiのバージョンの定義の完全なリスト](http://stackoverflow.com/q/750801/33732)をチェックし、そのコードの代わりに定義されているシンボルを使用するようにコードを適合させてください著者が選んだ。 –
質問はとても良いと思います。ポスターは「プログラムをコンパイルできず、理由を理解できません」。何がもっと必要ですか?追加情報があれば、可能な回答にバイアスをかけることがあります。とにかく、10に対して1は検索パス/ユニットが見つかりませんでした。たとえば、TDRecList.pasをコンパイルするには、TDBasics.pasおよびTDDefine.incファイルが検索パスに存在する必要があります。 – Igor
イゴール、ありがとう!私はあまりにも理解していない...ユニットがある(私の記事のリンクを参照)。ユニットをプログラムに追加します。それは明確ですか?コードをコンパイルできません。エラー: http://i.stack.imgur.com/VIM6x.png http://i.stack.imgur.com/7i3To。png – tbutton
@Igor、あなたは正解です。それは、暗闇の中でただのショットの代わりに、*役立つ*に向かってそれらを偏らせるでしょう。この質問の欠落している情報の最も基本的な部分は*エラーメッセージ*です。 –