2

TDictionaryのを使用してい<string, string>ます。しかし、何らかの理由で、リンカは私がそこから項目を取得したくないと判断しました。

次のコードがあります。

function TSheet.GetFieldName(Field: string; Default: string): string;
begin
  Result := Default;
  if FFieldNames[Field] = '' then
    Result := Field
  else
    Result := FFieldNames[Field];
end;

FFieldNamesですTDictionary<string, string>。2 行目 ( if FFieldNames[Field] = '' then) で、「ファイルが見つかりません」という例外がスローされます。FFieldNames[Field]ウォッチに追加すると、呼び出される関数 {System.Generics.Collections}TDictionary.GetItem が linker によって削除されたことがわかります

デバッグ中にリンカーが機能を削除しないようにする方法について、同様の問題について誰かがここで尋ねました。このことから、コンパイラ/リンカーは私がそれを使用していないと想定していることを収集しました。誰かが、会話中に、もっと使ってみるべきだと提案しました。

そこで、次のコードを作成しました。

FFieldNames.Add(Name, S);
V := FFieldNames.Items[Name];

SNameおよびVは文字列です。FFieldNamesこれは、データが入力され ているコードからのものです。Vの唯一の目的は、挿入されたばかりのものを取得することSです。他には何もしません。

奇妙なことに、デバッガーは同じこと (つまりGetItem、削除された) を教えてくれますVが、期待値に設定されます。しかし、それは私の機能ではありませんTSheet.GetFieldName。:|

私は何が欠けていますか?

4

1 に答える 1