Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 19, 2025 15:07

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: DLL ruft CallBack Funktion auf
BeitragVerfasst: Do Sep 04, 2003 22:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 24, 2003 18:19
Beiträge: 165
Wohnort: Cologne
Hallo,

ich möchte folgendes realisieren:
ich übergebe einer DLL eine Callback-Funktion, die diese dann aufruft falls nötig. Wenn ich den Pointer der Funktion übergebe und diese dann in der DLL aufrufen will, stürzt es ab. So sieht ungefähr der code stark gekürzt aus:

Code:
  1.  
  2. // in der DLL
  3. type pCallBack = procedure(wert1,wert2: Integer);
  4.  
  5. var CallBack: pCallback;
  6. procedure SetCallBack(_callback: pCallBack);
  7. begin
  8.   @Callback:=@_CallBack;
  9. end;
  10.  
  11. procedure CallIt;
  12. begin
  13.   CallBack(123,456);
  14. end;
  15.  
  16. // in der EXE
  17.  
  18. procedure TestCallBack(wert1, wert2: Integer); stdcall;
  19. begin
  20.   // was weiss ich
  21. end;
  22.  
  23. begin
  24.   SetCallBack(TestCallBack);
  25.   CallIt;
  26. end.
  27.  


ist nicht genau der code weil ich das im moment anders realisiert habe, aber so in der art war es. im moment lädt die DLL die Funktionen aus der EXE mit LoadLibrary & GetProcAddress, aber das ist umständlich für das was ich realisieren will.

... sofern ich jetzt nicht n billigen Fehler beim original-sourcecode hatte und dieser jetzt einwandfrei läuft :D aber das glaube ich weniger...

_________________
www.omfg.biz - aktuelles projekt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 05, 2003 06:01 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Auch wenn dein vorletzter Satz ohne Kaffee ein wenig verwirrend ist. Irgendwie kann ich da auch gerade keine konkrete Frage entdecken.

Es genügt vollkommen, dass du aus deiner Echse die Methode SetCallback lädst und ihr dann einen Callback übergibst.
Kann es sein, dass du die Methode SetCallback nicht richtig (im)exportierst. Da solltest du mal schauen ob die Methode nach dem Laden gesetzt ist.
Sonst fällt mir da gerade auch nicht viel mehr dazu ein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 05, 2003 07:24 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Das Problem ist ganz einfach: Du hast unterschiedliche Aufruf-Konversionen: stdcall und register (Delphi nimmt per Default immer register wenn man nichts angiebt!). Nimm das StdCall von TestCallBack weg oder füg es bei pCallBack hinzu. Wenn Du nur mit Delphi arbeitest, kannst du auf StdCall verzichten (ist schneller). Willst Du die Funktion aber auch anderen Programmiersprachen zur Verfügung stellen, muss StdCall hizugefügt werden!

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.014s | 17 Queries | GZIP : On ]