E2172 必要な作業関数がリンカによって削除されました (%s) (Delphi)
エラーと警告のメッセージ(Delphi) への移動
要求された評価を実行するために,統合デバッガがコンパイラのヘルパー関数を使用しようとしています。一方,リンカはヘルパー関数が実際にはプログラムに使用されなかったと判断し,ヘルパー関数をプログラムへリンクしませんでした。
- 新しいアプリケーションを作成します。
- フォーム上にボタンを配置します。
- ボタンをダブルクリックして Click メソッドを作成します。
- string 型のグローバル変数 v をインターフェース部に追加します。
- PChar 型のグローバル変数 p をインターフェース部に追加します。
Click メソッドにこのコードを追加します。
- procedure TForm1.Button1Click(Sender: TObject); begin v := 'Initialized'; p := NIL; v := 'Abid'; end;
- v への 2 番めの代入にブレークポイントを設定します。
- アプリケーションをコンパイルして実行します。
- ボタンを押します。
- ブレークポイントに到達した後,[評価/変更]ダイアログボックスを開きます([実行|評価/変更])。
- v を評価します。
- カーソルを[新しい値]ボックスまで移動します。
- p と入力します。
- [変更]を選択します。
コンパイラは専用の特殊関数を使って PChar を string 型へコピーします。その特殊関数はプログラムで使用されていない場合,生成する実行可能コードのサイズを小さくするためにリンクされません。以下の例では,string 型への PChar の代入が存在しないため,リンカによってその特殊関数は削除されます。
procedure TForm1.Button1Click(Sender: TObject); begin v := 'Initialized'; p := NIL; v := 'Abid'; v := p; end;
文字列の PChar の代入を追加すれば,求める手続きがリンカによってプログラムに組み込まれます。デバッグセッション中に発生したこのエラーは,オリジナルのプログラムに必要でなかった言語/環境機能を使用していることを意味します。