解决方法
基于
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;