gpt4 book ai didi

string - Delphi:调用名称存储在字符串中的函数

转载 作者:行者123 更新时间:2023-12-03 14:34:14 24 4
gpt4 key购买 nike

是否可以在Delphi中调用名称存储在字符串中的函数?

最佳答案

请详细说明您想要实现的目标。

据我所知:

  • 不可能调用这样的随机函数。
  • 对于类和对象函数 (MyObject.Function),这可以通过 RTTI 完成,但工作量很大。
  • 如果您只需要调用一种特定类型的函数(例如 function(integer, integer): string),那就容易多了。

对于最后一个,声明一个函数类型,然后获取一个函数指针并像这样进行转换:

type
TMyFuncType = function(a: integer; b: integer): string of object;

TMyClass = class
published
function Func1(a: integer; b: integer): string;
function Func2(a: integer; b: integer): string;
function Func3(a: integer; b: integer): string;
public
function Call(MethodName: string; a, b: integer): string;
end;

function TMyClass.Call(MethodName: string; a, b: integer): string;
var m: TMethod;
begin
m.Code := Self.MethodAddress(MethodName); //find method code
m.Data := pointer(Self); //store pointer to object instance
Result := TMyFuncType(m)(a, b);
end;

{...}

//use it like this
var MyClass: TMyClass;
begin
MyClass := TMyClass.Create;
MyClass.Call('Func1', 3, 5);
MyClass.Call('Func2', 6, 4);
MyClass.Destroy;
end.

关于string - Delphi:调用名称存储在字符串中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4186458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com