AGB  ·  Datenschutz  ·  Impressum  







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

Probleme mit WM_CopyData

Ein Thema von runningsoft · begonnen am 27. Sep 2011 · letzter Beitrag vom 5. Jan 2016
Antwort Antwort
Benutzerbild von Luckie
Luckie

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

AW: Probleme mit WM_CopyData

  Alt 27. Sep 2011, 14:11
weil Pchar auf 16Bit Char zeigt (D2010). Nimm Pansichar und es klappt wieder.

Früher wurde immer nach Unicode Unterstützung geschrien. Jetzt ist sie da und jetzt gibt es immer wieder die Ratschläge alles wieder auf Ansi zurückzustutzen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Probleme mit WM_CopyData

  Alt 27. Sep 2011, 14:42
Entweder man arbeitet mit Ansichar (8Bit) oder mit Char (16Bit)aber das sollte man dann auch sauber durchziehen.
Und wenn es eine saubere Typbezeichnung gäbe, wie z.B. Char8 oder Char16 dann würden sich auch viele nicht so schwertun.
Aber ich glaube das hatten wir hier schon alles einmal.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#3

AW: Probleme mit WM_CopyData

  Alt 27. Sep 2011, 14:48
Char (16Bit)
Char ist entweder 8 oder 16 Bit, je nach Delphi-Version. Und explizite Typbezeichnungen gibt es auch, nämlich AnsiChar und WideChar. Alles kein Problem, solange man nicht davon ausgeht, dass die Bytegröße eines Strings seiner Länge entspricht, was ja hier der Fall war.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.223 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Probleme mit WM_CopyData

  Alt 27. Sep 2011, 14:51
Bedenke auch das eine WM_COPYDATA im eigenen Programm zur Kommunikation Programmintern nicht funktioniert bzw. zufällig funktioniert wenn NView installiert ist. Dieser Hook WM_COPYDATA-Events und reicht sie nicht mehr weiter wenn das Event nicht zwischen Prozessen verwendet wird.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Probleme mit WM_CopyData

  Alt 27. Sep 2011, 14:54
Wobei PAnsiChar kein sooo schlechter Rat war.

Aber ich würde da eher auf PWideChar gehn.

Also WideString/UnicodeString, SizeOf(WideChar) und PWideChar.

Denn wenn man jetzt ein altes Ansi-Programm mit einem neuen Unicode-Programm reden läßt, dann kommt wieder nur Müll raus.


Beim Abspeichern und beim Datenübertragen niemals dynamisch Typen ala Integer, NativeInt, Pointer, String, PChar und Char verwenden (außer man speichert die Größe mit ab),
denn dabei kann man schnell Probleme bekommen, wenn sich diese Typen mal ändern. (siehe "früher ging es mal")



PS: Auch aufpassen, wen die beiden Programme mit unterschiedlichen Rechten arbeiten.
Ein Programm im Benutzerkontekt kann einem Programm mit höheren Rechten (Admin) keine Messages schicken.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#6

AW: Probleme mit WM_CopyData

  Alt 27. Sep 2011, 14:58
Sender- und Empfänger-Programm sind ja wohl laut Ausgangspost beide vom TE. Solange er also in beiden die selben Typen (und dieselbe Delphi-Version) benutzt, sollte es bezüglich Ansi oder Unicode keine Probleme geben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Probleme mit WM_CopyData

  Alt 6. Dez 2015, 09:25
Mir ist auch grade aufgefallen, daß hier Pointer nach LongInt (32-Bit) gecastet werden.
Da kann es in einem 64 Bit-Programm natürlich auch wunderbar knallen.
In Win64 sind zwar viele Handle immernoch 32 Bit, auch wenn der Typ 64 Bit ist, als Tribut an die IPC zu 32 Bit, aber Zeiger aus dem Delphi-Speichermanager sind da natürlich nicht begrenzt, außer es wird explizit so verlangt.

PS: Für SendMessage gibt es auch extra die zugehörigen Typen, also WPARAM, LPARAM und LRESULT.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 6. Dez 2015 um 09:48 Uhr)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#8

AW: Probleme mit WM_CopyData

  Alt 5. Jan 2016, 11:28
Bei unterschiedlichen Prozessen ist die Adresse nur so lange gültig, bis die Nachricht verarbeitet wurde.
An dieser Stelle muss ein neuer String mit einer Kopie der Zeichenkette angelegt werden:
Delphi-Quellcode:
..
s := PChar(Msg.CopyDataStruct.lpData);
..
Der zusätzlichen Cast auf String ist ungültig, denn lpData verweist nur auf einen Puffer mit einer 0-terminierten Zeichenkette.
Bei einem String liegt ein Teil der Daten (z.B. Referenzzähler) vor dieser Adresse.
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz