E2172 必要な作業関数がリンカによって削除されました (%s) (Delphi)

提供: RAD Studio
移動先: 案内検索

エラーと警告のメッセージ(Delphi) への移動

要求された評価を実行するために,統合デバッガがコンパイラのヘルパー関数を使用しようとしています。一方,リンカはヘルパー関数が実際にはプログラムに使用されなかったと判断し,ヘルパー関数をプログラムへリンクしませんでした。

  1. 新しいアプリケーションを作成します。
  2. フォーム上にボタンを配置します。
  3. ボタンをダブルクリックして Click メソッドを作成します。
  4. string 型のグローバル変数 v をインターフェース部に追加します。
  5. PChar 型のグローバル変数 p をインターフェース部に追加します。

Click メソッドにこのコードを追加します。

  1. procedure TForm1.Button1Click(Sender: TObject); begin v := 'Initialized'; p := NIL; v := 'Abid'; end;
  2. v への 2 番めの代入にブレークポイントを設定します。
  3. アプリケーションをコンパイルして実行します。
  4. ボタンを押します。
  5. ブレークポイントに到達した後,[評価/変更]ダイアログボックスを開きます([実行|評価/変更])。
  6. v を評価します。
  7. カーソルを[新しい値]ボックスまで移動します。
  8. p と入力します。
  9. [変更]を選択します。

コンパイラは専用の特殊関数を使って PChar を string 型へコピーします。その特殊関数はプログラムで使用されていない場合,生成する実行可能コードのサイズを小さくするためにリンクされません。以下の例では,string 型への PChar の代入が存在しないため,リンカによってその特殊関数は削除されます。


  procedure TForm1.Button1Click(Sender: TObject);
  begin
       v := 'Initialized';
       p := NIL;
       v := 'Abid';
       v := p;
  end;

文字列の PChar の代入を追加すれば,求める手続きがリンカによってプログラムに組み込まれます。デバッグセッション中に発生したこのエラーは,オリジナルのプログラムに必要でなかった言語/環境機能を使用していることを意味します。