Delphi XE7 Android 如何存储函数指针以供以后访问?
Delphi XE7 Android how to store function pointers to later access?
当使用 Delphi 创建 Windows 应用程序时,可以将函数指针存储在 TStringList 变量中,例如...
function n_func(var data: integer): integer;
begin
//do something with data that will change its value
Result := data;
end;
...
var
ls: TStringList;
begin
try
ls := TStringList.Create;
ls.AddObject('myfunc', TObject(@n_func));
...
...
finally
ls.Free;
end;
end;
但这不是 Android 中的一个选项,I've read this article 解释了当需要存储对对象的引用时如何解决问题。当需要存储对函数的引用时,有什么类似的解决方案可以稍后在应用程序执行期间动态调用?
使用字典。声明函数的类型:
type
TMyFuncType = reference to function(var data: integer): integer;
然后字典:
var
Dict: TDictionary<string, TMyFuncType>;
以常规方式创建一个:
Dict := TDictionary<string, TMyFuncType>.Create;
这样添加:
Dict.Add('myfunc', n_func);
像这样检索
Func := Dict['myfunc'];
从文档中了解更多信息:http://docwiki.embarcadero.com/Libraries/en/System.Generics.Collections.TDictionary
当使用 Delphi 创建 Windows 应用程序时,可以将函数指针存储在 TStringList 变量中,例如...
function n_func(var data: integer): integer;
begin
//do something with data that will change its value
Result := data;
end;
...
var
ls: TStringList;
begin
try
ls := TStringList.Create;
ls.AddObject('myfunc', TObject(@n_func));
...
...
finally
ls.Free;
end;
end;
但这不是 Android 中的一个选项,I've read this article 解释了当需要存储对对象的引用时如何解决问题。当需要存储对函数的引用时,有什么类似的解决方案可以稍后在应用程序执行期间动态调用?
使用字典。声明函数的类型:
type
TMyFuncType = reference to function(var data: integer): integer;
然后字典:
var
Dict: TDictionary<string, TMyFuncType>;
以常规方式创建一个:
Dict := TDictionary<string, TMyFuncType>.Create;
这样添加:
Dict.Add('myfunc', n_func);
像这样检索
Func := Dict['myfunc'];
从文档中了解更多信息:http://docwiki.embarcadero.com/Libraries/en/System.Generics.Collections.TDictionary