AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein SendMessage überträgt String nicht zuverlässig
Thema durchsuchen
Ansicht
Themen-Optionen

SendMessage überträgt String nicht zuverlässig

Ein Thema von Kostas · begonnen am 13. Jun 2014 · letzter Beitrag vom 16. Jun 2014
Antwort Antwort
Seite 2 von 4     12 34      
theunreplicated

Registriert seit: 14. Jun 2014
2 Beiträge
 
#11

AW: SendMessage überträgt String nicht zuverlässig

  Alt 14. Jun 2014, 19:45
vllt. könntest du es auch mal mit SendMessageW versuchen.
Denn das W als letzter Buchstabe im Funktionsname steht nämlich für den Unicode-Funktion Aufruf der WinAPI.
Ich schätze mal,dass es daran liegen wird.
Denn n Delphi-String baut afaik auf Unicode auf, mit SendMessage ohne W(ist eigentlich n Makro für SendMessageA) rufst du aber die Funktion für Ansi-Strings auf.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: SendMessage überträgt String nicht zuverlässig

  Alt 14. Jun 2014, 19:55
Das hat hier keinerlei Auswirkung, da diese Message binär ist und nichts mit Texten zu tun hat.


Und nein, ein Delphi-String ist nicht immer Unicode.

Bis Delphi 2007 ist String ein Alias für AnsiString und SendMessage ist ein Alias für SendMessageA.
Ab Delphi 2009 ist String ein Alias für UnicodeString und SendMessage ein Alias für SendMessageW.
Ach ja, ganz am Anfang war String das, was heutzutage der ShortString ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (14. Jun 2014 um 20:01 Uhr)
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: SendMessage überträgt String nicht zuverlässig

  Alt 14. Jun 2014, 20:38
Hallo zusammen,

ach, ein dummer Fehler ist mit da passiert.
Ich habe eine public Variable vom Typ TCopyDataStruct angelegt
und mit Werten befüllt. Danach über einen Thread zugegriffen und gesendet.
Jetzt erzeuge ich das TCopyDataStruct innerhalb vom Thread und es funktioniert
einwandfrei.

Sorry dass ich bemüht habe.
Gruß Kostas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: SendMessage überträgt String nicht zuverlässig

  Alt 14. Jun 2014, 21:03
Jaja, es ist immer besser, alles zu sagen und wenn möglich auch den Originalcode zu zeigen, da sonst wichtige Informationen fehlen.

Ich hoffe du hast die Zugriffe auch orgendlich abgesichert. !:!
- z.B. synchronisieren oder über CriticalSections sperren

Dein Fehler war also nicht der Thread, sondern die Speicherverwaltung.
Wenn du schon sowas machst, dann soltest du unbedingt lernen und verstehen, wie das mit den Pointern so funktioniert.

Zitat:
copyDataStruct.lpData := PChar(Nachricht);
Hier wird nur ein Zeiger auf die Daten des Strings "Nachricht" in lpData gespeichert.
Wenn jetzt der String zwischenzeitlich verändert oder freigegeben wird, dann ist auch der Zeiger ungültig.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#15

AW: SendMessage überträgt String nicht zuverlässig

  Alt 14. Jun 2014, 21:15
Hallo himitsu,

mein Problem war ich habe zwar den Thread Syncronisiert jedoch nicht an dieser Stelle wo ich auf die TCopyDataStruct
zugegriffen habe. Das war alles. Übrigens, merke ich das SendMessage über HWND_BROADCAST ein paar Sekunden braucht
bis es versendet werden kann. Sende ich jedoch mit dem Handle von der Receiver Anwendung Funktionier das Senden sofort
und brauche daher kein Thread mehr. Ich versuche jetzt mal WM_user + 100 oder aber auch RegisterWindowMessage.
Mal sehen mir besser gefehlt.

Dir noch eine schöne Zeit.
Gruß Kostas
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#16

AW: SendMessage überträgt String nicht zuverlässig

  Alt 15. Jun 2014, 00:45
Zitat:
Übrigens, merke ich das SendMessage über HWND_BROADCAST ein paar Sekunden braucht
Es ist nun mal halt so das eine SendMessage auf eine Rückantwort wartet.
Willst du das nicht verwende PeakMessage ops.. PostMessage.

gruss

Geändert von EWeiss (15. Jun 2014 um 14:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: SendMessage überträgt String nicht zuverlässig

  Alt 15. Jun 2014, 07:42
Meinst du nicht PostMessage?

Wobei hier SendMessage eh keine sinnvolle Antwort zurückgeben kann.
Denn, wie gesagt, sendet HWND_BROADCAST die Meldung an alle Programme (TopLevelWindows), hat nur ein Result und kann da natürlich nicht taustende Antworten drin unterbekommen.

Und das Tausende mein ich ernst. (nja, zumindestens paar Hundert sind es bestimmt)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (15. Jun 2014 um 07:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

AW: SendMessage überträgt String nicht zuverlässig

  Alt 15. Jun 2014, 07:54
Zitat:
Übrigens, merke ich das SendMessage über HWND_BROADCAST ein paar Sekunden braucht
Bei SendMessage kann man den Rückgabewert auswerten und das geht eben nur, wenn so lange gewartet wird, bis SendMessage seine Arbeit verrichtet hat.

Bei HWND_BROADCAST wird jedes Top-Level-Fenster besucht und bei jedem wird gewartet bis das Fenster diese Nachricht bearbeitet hat.

Mehr muss man wohl nicht erklären, warum das ein paar Sekunden benötigen kann und bei einer tollen Anwendung mit einem blockierendem GUI-Thread kann das auch noch länger dauern.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#19

AW: SendMessage überträgt String nicht zuverlässig

  Alt 15. Jun 2014, 13:17
Meinst du nicht PostMessage?

Wobei hier SendMessage eh keine sinnvolle Antwort zurückgeben kann.
Denn, wie gesagt, sendet HWND_BROADCAST die Meldung an alle Programme (TopLevelWindows), hat nur ein Result und kann da natürlich nicht taustende Antworten drin unterbekommen.

Und das Tausende mein ich ernst. (nja, zumindestens paar Hundert sind es bestimmt)
JA natürlich..
Sorry war spät gestern.

Zitat:
@Sir Rufo.. Bei SendMessage kann man den Rückgabewert auswerten und das geht eben nur, wenn so lange gewartet wird, bis SendMessage seine Arbeit verrichtet hat.
Mach aber in seinem Fall nicht wirklich sinn. Oder?

gruss

Geändert von EWeiss (15. Jun 2014 um 13:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#20

AW: SendMessage überträgt String nicht zuverlässig

  Alt 15. Jun 2014, 14:16
Zitat:
@Sir Rufo.. Bei SendMessage kann man den Rückgabewert auswerten und das geht eben nur, wenn so lange gewartet wird, bis SendMessage seine Arbeit verrichtet hat.
Mach aber in seinem Fall nicht wirklich sinn. Oder?
Nö, nicht wirklich
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 10: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