Basado en this thread
y lo que Thomas Mueller señaló allí, puede definir tipos con las mismas firmas que los métodos cuyas direcciones desea obtener (para cada sobrecarga). Si luego declaras las variables de esos tipos y les asignas punteros a los métodos, te asegurarás de que el compilador elija la sobrecarga correcta para tu tipo de variable conocido y además que no los ignorará si no se usan en ninguna parte del código. (algunas sobrecargas pueden no estar vinculadas en su binario).
Así que basado en su idea que podría busca la MessageDlgPosHelp
sobrecargas función como esta:
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;
Obteniendo la dirección del método de clase sobrecargado se discute [aquí] (http://stackoverflow.com/questions/10083448/trttimethod-invoke-function-doesnt-work-in-overloaded-methods). Por cierto, en mi Delphi 7, MessageDlgPosHelp no está sobrecargado, y es solo una función normal, no un método. El término "Método" se refiere a la función o procedimiento de una clase. – Hendra
El término 'método' para mí significa una función o procedimiento, posiblemente de una clase. He editado la pregunta para reflejar su significado del término "método". –
Me gusta la respuesta de TLama (y marqué en consecuencia). Hubiera preferido algo como el modo RTTI (como lo sugiere el enlace de Hendra) que funcionaría con la versión anterior de Delphi (que no tiene RTTI extendido). –