关于TDictionary的GetItem被链接器消除了

时间:2013-03-08 09:43:01

标签: delphi linker tdictionary

我正在使用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;

FFieldNamesTDictionary<string, string>。在第2行(if FFieldNames[Field] = '' then),它会抛出“找不到文件”异常。将FFieldNames[Field]添加到我的监视器中会告诉我要调用的函数{System.Generics.Collections} TDictionary.GetItem已被链接器删除。

Someone asked here on a similar issue关于如何在调试期间避免链接器消除函数。从此我收集到,编译器/链接器假定我没有使用它。有人建议 - 在谈话期间 - 我应该尝试使用 more

所以我创建了以下代码:

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

SNameV是字符串。这是来自FFieldNames填充数据的代码。 V的唯一目的是获取刚刚插入的S;它没有别的。

奇怪的是,虽然调试器告诉我同样的事情(即GetItem被删除),但V确实设置为预期值。但它不在我的TSheet.GetFieldName函数中。 :|

我错过了什么?

1 个答案:

答案 0 :(得分:0)

同样的问题适用于MARGIN=c(1,2)。即使代码在类中使用了一个方法,也无法从调试器中访问它(&#34; TList上的xxx被链接器消除了#34;)。我想这是泛型一般的问题。

如果你做了一个后代课,那就不会有这个问题了

TList<>