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];
S
、Name
およびV
は文字列です。FFieldNames
これは、データが入力され ているコードからのものです。V
の唯一の目的は、挿入されたばかりのものを取得することS
です。他には何もしません。
奇妙なことに、デバッガーは同じこと (つまりGetItem
、削除された) を教えてくれますV
が、期待値に設定されます。しかし、それは私の機能ではありませんTSheet.GetFieldName
。:|
私は何が欠けていますか?