In base a this thread
e in base a quanto indicato da Thomas Mueller, è possibile definire tipi con le stesse firme dei metodi di cui si desidera ottenere gli indirizzi (per ciascun sovraccarico). Se dichiari quindi le variabili di questi tipi e assegni loro dei puntatori al metodo, assicurerai che il compilatore scelga il sovraccarico corretto per il tipo di variabile conosciuto e inoltre che non li ignorerà se non verrebbero utilizzati da nessuna parte nel codice (alcuni sovraccarichi potrebbero non essere collegati nel tuo binario).
Quindi, in base alla sua idea che potrebbe cerca le MessageDlgPosHelp
sovraccarichi funzione come questa:
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;
Viene discusso l'indirizzo del metodo di classe sovraccarico [qui] (http://stackoverflow.com/questions/10083448/trttimethod-invoke-function-doesnt-work-in-overloaded-methods). A proposito, nel mio Delphi 7, MessageDlgPosHelp non è sovraccarico, ed è solo una funzione normale, non un metodo. Il termine "Metodo" si riferisce alla funzione o alla procedura di una classe. – Hendra
Il termine 'metodo' per me significa una funzione o una procedura, possibilmente di una classe. Ho modificato la domanda per riflettere il tuo significato del termine "metodo". –
Mi piace la risposta di TLama (e ho spuntato di conseguenza). Avrei preferito qualcosa di simile al modo RTTI (come suggerito dal collegamento di Hendra) che avrebbe funzionato con la versione precedente di Delphi (che non ha RTTI esteso). –