首页 > 其他分享 >rtti路由

rtti路由

时间:2023-01-27 19:00:18浏览次数:35  
标签:begin end ctx className var rtti typ 路由

rtti路由

/// <author>2023-1-26</author>
unit rtti.execfunc;

interface

uses
  System.Classes, system.Rtti, System.StrUtils, System.SysUtils;

type
  /// <code>
  /// 基类
  /// </code>
  TFunc = class(TPersistent)
  end;

/// <summary>
/// 动态执行指定类的方法
/// </summary>
/// <param name="className">类名</param>
/// <param name="funcName">方法名</param>
/// <param name="funcParam">方法参数</param>
function execFunc(className, funcName: string; funcParam: array of TValue): TValue;

implementation

function FindAClass(const className: string): TClass;
var
  ctx: TRttiContext;
  typ: TRttiType;
  list: TArray<TRttiType>;
begin
  Result := nil;
  ctx := TRttiContext.Create;
  list := ctx.GetTypes;
  for typ in list do
  begin
    if typ.IsInstance and (EndsText(className, typ.Name)) then
    begin
      Result := typ.AsInstance.MetaClassType;
      break;
    end;
  end;
  ctx.Free;
end;

function execFunc(className, funcName: string; funcParam: array of TValue): TValue;
begin
  var ctx: TRttiContext;
  var t: TRttiType;
  var m: TRttiMethod;
  ctx := TRttiContext.Create;
  var c: TClass := FindAClass(className);
  if c = nil then
  begin
    Writeln('还没有注册类: RegisterClass(TFunc1)');
    Exit;
  end;
  t := ctx.GetType(c);
  m := t.GetMethod(funcName);
  var o: TFunc := c.Create as TFunc;
  Result := m.Invoke(o, funcParam);
  ctx.Free;
  o.Free;
end;

end.

 

标签:begin,end,ctx,className,var,rtti,typ,路由
From: https://www.cnblogs.com/hnxxcxg/p/17069179.html

相关文章

  • Flutter 耗时监控 | 路由名为空原因分析
    前言最近群里遇到获取Route名为空的问题,当时没在意。。。直到自己在监控页面启动耗时,需要确定当前页面是哪个从而方便标记它加载的耗时时,遇到同样route.settings.name......
  • vue路由
    视频链接:https://www.bilibili.com/video/BV1Zy4y1K7SH?p=118什么是vue路由?答:概念是这么说的嗷:路由的本质就是一种对应关系,比如说url地址和资源之间的对应关系。我来简......
  • 路由器分组转发算法
    以下内容参考<<计算机网络第五版>>谢希仁编著p128(1)首先从IP数据报首部提取出目的主机的IP地址D,得出其所在的网络N。(2)若N就是与此路由器直接相连的某个网络,则进行直接交......
  • Knative路由管理
    Knative通过控制入口网关的流量分配来实现服务的路由管理。Knative为每个服务生成唯一的域名,入口网关会根据域名转发请求到对应的服务。1定制Knative服务的主域名Knativ......
  • 路由
                                                ......
  • 路由器功能------BFD (Bidirectional Forwarding Detection)双向转发检测
    原理:1.状态迁移BFD会话建立遵循三次握手,BFD有四种状态:Down:会话处于Down或者刚刚创建Init:已经能够与对端系统通信,本端希望使会话进入Up状态Up:会话已经建立AdminDown:会......
  • 华为路由器 OSPF单区域配置
    拓扑图一、R1 路由器<Huawei>sys[Huawei]sysR1[R1]uninen[R1]dhcpenable[R1]intg0/0/0[R1-GigabitEthernet0/0/0]ipaddr192.168.20.224#配置DHCP[R1-GigabitEthe......
  • VueRouter路由嵌套
    1.前言本小节我们介绍如何嵌套使用VueRouter。嵌套路由在日常的开发中非常常见,如何定义和使用嵌套路由是本节的重点。同学们在学完本节课程之后需要自己多尝试配置路由。2......
  • 06-路由-组件详解
    上一篇博客中已经展示了部分路由解析的源码,但是比较大概,不够清晰,只能提供调试的思路。这一篇博客将会抽出路由的每一个组件。详细阐述路由如何解析的。前面不会连贯起每一......
  • 从路由器真机提取固件包(一)
    前言看IOT也有一段时间了,但是一直都是从官网获取固件包,没有尝试过从真机里提取固件。在看了一些师傅的文章后决定尝试一下从真机中提取固件。正好手里也有几个路由器,于是......