Also ich sehe dass ich, wenn ich das @ weglasse, in beiden Fällen einen Fehler E2009 "Unterschiede in der Aufrufkonvention" bekomme wenn ich versuche eine Routine ohne stdcall in eine Variable zu stecken die stdcall erwartet. Das ist gut.
Bei der @-Variante nicht.
Ich habe das Projekt mal auf eine VM mit Delphi XE kopiert und dort kompiliert und gestartet.
Delphi-Quellcode:
// CallBack aufruf festlegen
procedure SetCallBackProc(CallBackProc: TCallBackProc); stdcall
begin
FCallBackProc := CallBackProc; // @FCallBackProc := CallBackProc; geht auch
end;
Ohne @ funktioniert es einwandfrei. Mit @ bekomme ich in XE die Meldung "E2035. Not enough parameter."
Dann habe ich in der EXE
Delphi-Quellcode:
// Callback-Handler
procedure HandleMessage(sMsg:WideString); stdcall;
begin
Form1.meMessage.Lines.Add(sMsg);
end;
mit und ohne
stcall; probiert. Das hat beides ohne Probleme funktioniert
und auch
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
// CallBack-Procedure festlegen
SetCallBackProc(@HandleMessage); // funktioniert mit und ohne @
end;
funktioniert mit und ohne @