我如何获得一个重载的功能/程序/方法的所有地址位置?
例如,Dialogs.MessageDlgPosHelp超载具有它的两个不同版本 - 一个没有默认按钮和一个用。 我怎么会得到两个函数的地址位置?
我如何获得一个重载的功能/程序/方法的所有地址位置?
例如,Dialogs.MessageDlgPosHelp超载具有它的两个不同版本 - 一个没有默认按钮和一个用。 我怎么会得到两个函数的地址位置?
基于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;
你也可以创建派生类为具有不同名称的简单方法,强制转换类的任何实例,以新的类,将暴露这个重载的方法和容易使用你的包装方法的地址。