获取重载方法的地址位置

Nic*_*ing 8 delphi overload-resolution object-address

如何获取重载的函数/过程/方法的所有地址位置?

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

TLa*_*ama 15

基于this thread什么托马斯·穆勒指出还有,您可以定义类型具有相同签名,要获得(每过载),其地址的方法.如果然后声明这些类型的变量和分配方法指向他们,你将确保编译器选择正确的过载到您的已知变量类型,而且它不会忽略他们,如果他们不会在任何地方在代码中使用(某些重载可能无法在二进制文件中链接).

所以基于他的想法,它可能会寻找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;
Run Code Online (Sandbox Code Playgroud)