Einzelnen Beitrag anzeigen

norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#6

AW: Callback aus von DLL zu EXE in Delphi

  Alt 13. Dez 2017, 19:52
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 @

Geändert von norwegen60 (13. Dez 2017 um 20:24 Uhr)
  Mit Zitat antworten Zitat