Предлагаю оставить изначальный вариант:
function ForceGVar(const Name:string):PData;
var i:integer;
begin
Result := nil;
if Name=' then exit;
i := NList.IndexOf(LowerCase(Name));
if i>=0 then
Result := PData(NList.Objects[i])
else begin
new(Result);
dtNull(Result^);
NList.AddObject(LowerCase(Name),cardinal(Result));
end;
end;