加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 获取重载方法的地址位置

发布时间:2020-12-15 10:06:26 所属栏目:大数据 来源:网络整理
导读:如何获取重载的函数/过程/方法的所有地址位置? 例如,Dialogs.MessageDlgPosHelp有两个不同版本的重载 – 一个没有默认按钮,另一个没有.我如何获得这两个函数的地址位置? 解决方法 基于 this thread 以及 Thomas Mueller指向的那些,您可以定义具有与要获取
如何获取重载的函数/过程/方法的所有地址位置?

例如,Dialogs.MessageDlgPosHelp有两个不同版本的重载 – 一个没有默认按钮,另一个没有.我如何获得这两个函数的地址位置?

解决方法

基于 this thread以及 Thomas Mueller指向的那些,您可以定义具有与要获取其地址的方法相同的签名类型(对于每个重载).如果你然后声明这些类型的变量并为它们分配方法指针,你将确保编译器选择对已知变量类型的正确重载,而且如果它们不会在代码中的任何地方使用它们将不会忽略它们(某些重载可能无法在二进制文件中链接).

所以根据他的想法,它可能会寻找像这样的MessageDlgPosHelp函数重载:

type
  TMessageDlgPosHelp1 = function(const Msg: string; DlgType: TMsgDlgType;
    Buttons: TMsgDlgButtons; HelpCtx: Longint; X,Y: Integer;
    const HelpFileName: string): Integer;
  TMessageDlgPosHelp2 = function(const Msg: string; DlgType: TMsgDlgType;
    Buttons: TMsgDlgButtons; HelpCtx: Longint; X,Y: Integer;
    const HelpFileName: string; DefaultButton: TMsgDlgBtn): Integer;

procedure TForm1.Button1Click(Sender: TObject);
var
  MessageDlgPosHelp1: TMessageDlgPosHelp1;
  MessageDlgPosHelp2: TMessageDlgPosHelp2;
begin
  MessageDlgPosHelp1 := MessageDlgPosHelp;
  MessageDlgPosHelp2 := MessageDlgPosHelp;
  ShowMessage(Format('%p; %p',[@MessageDlgPosHelp1,@MessageDlgPosHelp2]));
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读