Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   SendMessage überträgt String nicht zuverlässig (https://www.delphipraxis.net/180743-sendmessage-uebertraegt-string-nicht-zuverlaessig.html)

Dejan Vu 15. Jun 2014 15:01

AW: SendMessage überträgt String nicht zuverlässig
 
Ist das schon erwähnt worden?
1. WM_COPYSTRUCT soll/darf nur mit SendMessage aufgerufen werden.
2. Die zu übertragenden Daten sollen/dürfen keine Pointer enthalten.
3. Der Empfänger soll die Daten schnellstmöglich aus der übergebenen Struktur kopieren und die Abarbeitung beenden.
4. Schneller geht es mit Pipes.

himitsu 15. Jun 2014 15:21

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

Zitat von Sir Rufo (Beitrag 1262350)
Nö, nicht wirklich ;)

Genauso, wie es keinen Sinn macht das an ALLES zu senden.

http://www.flounder.com/wm_copydata.htm
Zitat:

So sending a message like this using HWND_BROADCAST is to be considered a seriously antisocial act.
Der Meinung bin ich auch, obwohl das noch nett formuliert ist.

Kostas 15. Jun 2014 15:32

AW: SendMessage überträgt String nicht zuverlässig
 
Tausend Dank an alle beteiligten,

so funktioniert es einwandfrei und ausreichend schnell.

//zum Senden
Delphi-Quellcode:
procedure SendData;
var receiverHandle : THandle;
    copyDataStruct : TCopyDataStruct;
begin
  receiverHandle := FindWindow(PChar('TfrKamera1'),PChar('frKamera1'));

  if receiverHandle > 0 then
  begin
    copyDataStruct.dwData := Ord(ntCreateSnapShot);
    copyDataStruct.cbData := 1 + Length(SendMsgText);
    copyDataStruct.lpData := PChar(SendMsgText);

    SendMessage(receiverHandle, WM_COPYDATA, LPARAM(Handle), WPARAM(@copyDataStruct)) ;
  end;
end;
//zum Empfangen
Delphi-Quellcode:
procedure TfrKamera1.WMCopyData(var Msg: TWMCopyData) ;
var
  NachrichtTyp : TNachrichtTyp;
begin
  NachrichtTyp := TNachrichtTyp(Msg.CopyDataStruct.dwData);

  case NachrichtTyp of
    ntCreateSnapShot: HandleCopyDataString(Msg.CopyDataStruct);
  end;
end;
Für mein aktuelles Projekt ist es ausreichend.

Gruß Kostas

himitsu 15. Jun 2014 15:42

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

Zitat von Kostas (Beitrag 1262358)
so funktioniert es einwandfrei

Zitat:

Zitat von Kostas (Beitrag 1262242)
Beide Anwendungen sind in Delphi5 geschrieben. Da ist das Char noch 1 Byte lang.

Bis jemand auf die abwägige Idee kommt eines oder beide Programme mit seinem neueren Delphi zu kompilieren,
da diesbezüglich alles ignoriert wurde, aber was soll.

Kostas 15. Jun 2014 16:03

AW: SendMessage überträgt String nicht zuverlässig
 
Für Delphi5 habe ich nun mal keine andere Möglichkeit.
Für zukünftige IDEs habt ihr ja bereits die passenden Hinweise gleich mittgeliefert. :-)
Schönen Dank dafür.

Gruß Kosats

EWeiss 15. Jun 2014 16:25

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

Zitat von himitsu (Beitrag 1262360)
Zitat:

Zitat von Kostas (Beitrag 1262358)
so funktioniert es einwandfrei

Zitat:

Zitat von Kostas (Beitrag 1262242)
Beide Anwendungen sind in Delphi5 geschrieben. Da ist das Char noch 1 Byte lang.

Bis jemand auf die abwägige Idee kommt eines oder beide Programme mit seinem neueren Delphi zu kompilieren,
da diesbezüglich alles ignoriert wurde, aber was soll.

Das sind die Nachteile wenn man sich bei so einem Thema mit einbringt.
Man will nichts lernen sondern nur übernehmen wenn es denn passt.
Aber wie du schon sagst... was soll's

gruss

himitsu 15. Jun 2014 16:34

AW: SendMessage überträgt String nicht zuverlässig
 
Gute Erlärung, nur die genannten Pips und eigentlich nahezu alles Andere, was mit IPC zu tun hat, funktioniert auch mit alten Delphis.

Kostas 15. Jun 2014 16:41

AW: SendMessage überträgt String nicht zuverlässig
 
Hallo EWeiss,

ich bin mir nicht sicher ob du mich damit meinst. Falls doch,
ich habe schon gelernt dabei, das habe ich auch umgesetzt.
-Ich verwende keine Broadcast sondern sende an das Fensterhandle des Empfängers.
-Ich habe erfahren dass WM_COPYDATA nur mit SendMessage und nicht mit PostMessage geht.
-Jetzt ist mir klar warum Broadcast so langsam war.
-Ich weis jetzt dass in meinem Fall das Result unbrauchbar ist.

Oder habe ich etwas übersehen? Ich bin für Jede Info dankbar.

Gruß Kostas

EWeiss 15. Jun 2014 16:53

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

Zitat von Kostas (Beitrag 1262367)
Hallo EWeiss,

ich bin mir nicht sicher ob du mich damit meinst. Falls doch,
ich habe schon gelernt dabei, das habe ich auch umgesetzt.
-Ich verwende keine Broadcast sondern sende an das Fensterhandle des Empfängers.
-Ich habe erfahren dass WM_COPYDATA nur mit SendMessage und nicht mit PostMessage geht.
-Jetzt ist mir klar warum Broadcast so langsam war.
-Ich weis jetzt dass in meinem Fall das Result unbrauchbar ist.

Oder habe ich etwas übersehen? Ich bin für Jede Info dankbar.

Gruß Kostas


:thumb:

gruss

Kostas 15. Jun 2014 17:01

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

Zitat von himitsu (Beitrag 1262366)
Gute Erlärung, nur die genannten Pips und eigentlich nahezu alles Andere, was mit IPC zu tun hat, funktioniert auch mit alten Delphis.


Ja, verstehe. Sicherlich gibt es mehrere Wege. Für das aktuelle Projekt finde ich die Lösung mit SendMessage ausreichend.
Es geht um zwei Programme die beide auf dem gleichen Rechner laufen. Das eine erstellt ein Wägeschein und das andere
zeigt den Stream einer LAN-Kamera die auf die Ladefläche des LKWs schaut. Sobald ein Wägeschein erstellt wird, werden
ein paar Daten wie Datum, WägescheinNr, Kennzeichen u.s.w. an die andere Anwendung gesendet die gerade den Stream von der
LAN-Kamera zeigt. Der String wird empfangen, auf das Bild Projiziert und ein jpg als screen shot zur Dokumentation
erstellt. Beide Programme werden immer auf dem gleichen PC laufen. Deshalb schien mir die SendMessage Technik dir richtige
zu sein.

Übrigens, ich habe Messages immer vermieden wie der Teufel das Weihwasser. :-) War für mich also sehr Lehrreich.
Gruß Kostas


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:48 Uhr.
Seite 3 von 4     123 4      

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