Forum: Programmieren allgemein
by himitsu,
15. Jun 2014
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.
Forum: Programmieren allgemein
by himitsu,
15. Jun 2014
Genauso, wie es keinen Sinn macht das an ALLES zu senden.
http://www.flounder.com/wm_copydata.htm
Der Meinung bin ich auch, obwohl das noch nett formuliert ist.
Forum: Programmieren allgemein
by himitsu,
15. Jun 2014
Meinst du nicht PostMessage? :zwinker:
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)
Forum: Programmieren allgemein
by himitsu,
14. Jun 2014
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...
Forum: Programmieren allgemein
by himitsu,
13. Jun 2014
Bezüglich dem PS meines ersten Posts:
Nein, das machst du nicht. Du sendest diese Nachricht an alle anderen Programme. (abgesehn von Denen mit höheren Rechten, an die dein Programm keine Messages senden darf)
Forum: Programmieren allgemein
by himitsu,
13. Jun 2014
Ein Delphi-String besitzt eine Längenangabe (Integer) und braucht daher eigentlich die #0 am Ende nicht.
PChar wird aber ausschließlich durch ein #0 am Stringende begrenzt und wenn man Dieses nicht mit überträgt, dann liest man mit PChar bis zum nächsten #0, welches zufällig irgendwo danach im Arbeitsspeicher liegt und wenn es danach keinen reservierten Speicher mehr gibt, dann gibt es eine...
Forum: Programmieren allgemein
by himitsu,
13. Jun 2014
Und dann wurde noch etwas ganz Wichtiges vergessen.
Am Ziel wird das als PChar ausgelesen, also muß dort auch zwingend das String-Ende mit übertragen werden.
copyDataStruct.cbData := (Length(Nachricht) + 1) * Sizeof(Char);
Alternativ muß man beim Auslesen des Textes die Länge (copyDataStruct.cbData) verwenden und darf eben nicht bis zum nichtübertragenen/fehlenden Stringende lesen.
Ach...