AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Showmessage in callback

Ein Thema von Tonic1024 · begonnen am 25. Okt 2010 · letzter Beitrag vom 25. Okt 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Showmessage in callback

  Alt 25. Okt 2010, 10:10
Ich hab einen alten Code ausgegraben, der unter D7 und W2k immer funktioniert hat und unter D2k9 und Vista nur manchmal geht.

Delphi-Quellcode:
// Zum Testen stark vereinfacht - Fehler tritt aber immernoch auf.
procedure callback(Value: PAnsiChar);
begin
  Form1.Label4.Caption:=Value; // klappt immer
  showmessage('Tadaaa'); // klappt nur selten
end;
Der Callback kommt aus einer DLL und der Wert steht beim debuggen auch in Value. Hab zum testen mal nen Text statisch reingeschrieben. Selber effekt. Die Messagebox geht auf aber ist leer. Manchmal klappts aber auch. Ich löse den callback zum Testen durch einen ButtonClick aus. Klicke ich 10 mal hab ich bestimmt ca 3 mal Text in der Messagebox. Wie gesagt, ob ich Value anzeige oder Statischen Text ist egal. Der Callback ansich funktioniert also. Es muss IMO was an der VCL klemmen.

Der Callback ist nicht Teil der Klassenstruktur also auch bewusst nicht "of object". Ich denke mir, dass der Callback asynchron rein kommt und die VCL da Schwierigkeiten hat. Gibts da nen Trick oder so? Ich kann nix syncen in meinem Mainform, oder doch?

Gruß,

Toni
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Showmessage in callback

  Alt 25. Okt 2010, 10:15
Wie wird die Callback-Funktion aufgerufen aus der DLL? Ich denke, es wird an den unterschiedlichen Speichermanagern von DLL und Exe liegen. Und dass ab und zu ein Text ausgegeben wird, dürfte Zufall sein.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#3

AW: Showmessage in callback

  Alt 25. Okt 2010, 10:18
Da diese Prozedur ja in der EXE liegt, wird also der Speichermanager der EXE und nicht von der DLL benutzt.
Der PChar sollte auch dafür sorgen, daß die Speichermanager an dieser Stelle auch vonenander abgetrennt sind.


Was aber sein könnte.
Wird diese Callbackprozedur in einem anderem Thread ausgeführt?
Wenn ja, dann mußt du noch synchronisieren, denn die VCL ist nicht threadsicher.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Showmessage in callback

  Alt 25. Okt 2010, 10:21
Da diese Prozedur ja in der EXE liegt, wird also der Speichermanager der EXE und nicht von der DLL benutzt.
Ja, aber die Daten kommen aus der DLL.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#5

AW: Showmessage in callback

  Alt 25. Okt 2010, 10:24
mal schnell was zusammenkopiert...

Delphi-Quellcode:
 
  // Aus der DLL
type
  TVarCallback = procedure(Value: PAnsiChar);

[..]

var
  VarUpdateCallback: TVarCallback;

[..]

  if assigned(VarUpdateCallback) then
    VarUpdateCallback(PAnsiChar(aMsg.NewValue));
Das leuchtet mir nicht ein. Die Value wird ja korrekt übertragen und der Statische String wird ja auch nicht angezeigt.


[Edit]
Also die Callback Prozedur ist nicht Teil des Mainforms, liegt aber in der selben Unit. Die innereien der DLL kenne ich nur so grob. Sie wrappt ein SDK, dass ich zwar bedienen kann aber nicht vollständig verstehe. Der Callback wird duch Netzwerk Messages ausgelöst und da wird sicher was gethreaded. War auch mein erster Gedanke (siehe 1. Beitrag).

Wie sollte ich da vorgehen um das zu testen? MEin mainform hat ja kein Sycnchonize und in der DLL hab ich ja keine Referenz auf die ich syncen könnte.
[/Edit]
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?

Geändert von Tonic1024 (25. Okt 2010 um 10:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#6

AW: Showmessage in callback

  Alt 25. Okt 2010, 10:30
Ja, aber die Daten kommen aus der DLL.
Ja, die Daten kommen aus der DLL, aber es wird nicht auf deren Speichermanager zugegriffen ... nur auf Speicher, welcher von diesem Manager verwaltet wird und da gibt es keine Probleme, da nicht an der Speicherverwaltung rumgespielt wird.

Ein String als Parameter würde/könnte Probleme bereiten,
da dort Modulübergreifend an der Speicherwerwaltung rumgespielt werden könnte,
aber lesend auf einen PChar zuzugreifen ist da recht harmlos.


Der Zugriff auf dieses kleine Label ist noch kein großer Eingriff, weswegen er gradenoch problemlos ablaufen könnte.
Aber soein rießiger VCL-Dialog würde auf jeden Fall zu Konflikten führen, wenn er nicht im VCL/Haupt-Thread behandelt würde.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (25. Okt 2010 um 10:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Showmessage in callback

  Alt 25. Okt 2010, 10:34
Probiere es mal mit einer Messagebox.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#8

AW: Showmessage in callback

  Alt 25. Okt 2010, 10:42
Application.MessageBox scheint zuverlässig zu funktionieren.

Eigentlich will ich aber gar keine Msg ausgeben. Hab das nur eingebaut um die Funktion zu testen. Nur damit ich das richtig verstehe... Worauf muss ich achten wenn ich jetzt mit diesem callback arbeite?

Toni
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Showmessage in callback

  Alt 25. Okt 2010, 10:44
Eigentlich auf nichts. Nur eben keine VCL Dialoge verwenden, wie du gesehen hast.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Showmessage in callback

  Alt 25. Okt 2010, 10:47
Merke dir den Wert des Callbacks und benachrichtige dich intern durch eine User-Windows-Message.
Damit bist du wieder im Hauptthread der Anwendung und kannst problemlos auf die GUI-Elemente zugreifen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz