AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi String via Sendmessage unvollständig

String via Sendmessage unvollständig

Ein Thema von Ajintaro · begonnen am 7. Okt 2015 · letzter Beitrag vom 19. Okt 2015
Antwort Antwort
Benutzerbild von Luckie
Luckie

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

AW: String via Sendmessage unvollständig

  Alt 8. Okt 2015, 00:48
Bitte unterlasst es eure persönlichen Abneigungen hier öffentlich auszutragen.

Davon abgesehen halte ich einen zweiten Prozess für einen HTML Request auch für Overkill und unsinnig. Genau dafür sind Threads da, um Aufgaben im Hintergrund zu erledigen. Ein zweiter Prozess geht natürlich auch, aber da gestaltet sich die Interprozesskommunikation doch schon erheblich schwieriger. Ist der erste Prozess noch da? Kann er meine Nachricht empfangen oder ist er beschäftigt? Wie übermittele ich komplexe Daten? Bei einem Thread liegt alles im gleichen Prozessraum und ist einfach erreichbar. Und der "Auftraggeber" bestimmt wie was läuft.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: String via Sendmessage unvollständig

  Alt 8. Okt 2015, 06:18
Ich habe hier die Antworten, die mich sprachlos machten, entfernt.
Das Grundproblem ist ja, dass die Anwendung einfriert, wenn die Daten zu langsam kommen. Die fachlich gängige Lösung sind hier nunmal Threads.

Zitat:
Aber er überfordert sehr oft meinen Pascal-Horizont mit seinen aktuellen XE/Seatle Vereinfachungen.
Das ist in Ordnung, wir haben diese Plattform, um voneinander und miteinander etwas lernen zu können. Wenn man eine Lösung nicht versteht, sollte man nachfragen und nicht schimpfen.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: String via Sendmessage unvollständig

  Alt 8. Okt 2015, 07:54
Ernsthaft? So viele Antworten und noch keiner konnte eine richtige und klare Antwort auf das hier zustande bringen?

Das Problem ist, dass in XE6 (genauer: Ab Delphi 2009) die Chars in deinen Strings 2 Byte groß sind und DataStruct.cbData die Anzahl der zu sendenden Bytes möchte und nicht die Anzahl der Zeichen.
Von daher:
DataStruct.cbData := Length(Edit1.Text)*SizeOf(Char);
Darum werden deine Strings auch ziemlich genau ab der Hälfte abgeschnitten.

Probiert mal statt
Code:
  DataStruct.cbData := length(Edit1.Text)+1;
Code:
  DataStruct.cbData := SizeOf(Edit1.Text)+1;
SizeOf(Edit1.Text) gibt immer SizeOf(String) = SizeOf(Pointer) zurück. Also 4 in 32-Bit und 8 in 64-Bit Anwendungen.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General ( 8. Okt 2015 um 07:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Ajintaro
Ajintaro

Registriert seit: 20. Okt 2004
Ort: Sankt Augustin
138 Beiträge
 
Delphi XE6 Starter
 
#4

AW: String via Sendmessage unvollständig

  Alt 8. Okt 2015, 12:46
Hallo DP,

ein Foren-thread voller Emotionen... ich hoffe ich habe mti meinem Beitrag niemanden provoziert.
Bezüglich der Kernfrage, wieso der übermittelte String abgeschnitten wird wurde ich auf die richtige Spur gebracht:
Folgender code übertragt den String korrekt:

Sender:
Delphi-Quellcode:
DataStruct.cbData := 1 + (Length(Fmain.edit4.Text) * SizeOf(Char));
DataStruct.lpData := PWideChar(Fmain.edit4.Text);
Empfänger:
sMsg := PWideChar(Msg.CopyDataStruct.lpData);
Natürlich wären threads die klar bessere Lösung. Ich habe auch zuerst versucht, eine thread-basierte Lösung zu schreiben. Allerdings muss ich zugeben, dass das über meinem aktuellen (Delphi) Know-How ist. Es gibt unzählige Beitrage und Beispiele zu diesem Thema, aber ich konnte bisher keinen funktionierenden Code zustande bringen der einen POST request thread basiert absetzt.
Jaimy
DAoC 2.0 -> Camelot Unchained !

Geändert von Ajintaro ( 8. Okt 2015 um 14:01 Uhr) Grund: ANtwort angepasst
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#5

AW: String via Sendmessage unvollständig

  Alt 8. Okt 2015, 15:58
Inter-process communication (IPC)
In computing, Inter-process communication (IPC) is a set of techniques for the exchange of data among multiple threads in one or more processes. Processes may be running on one or more computers connected by a network. IPC techniques are divided into methods for message passing, synchronization, shared memory, and remote procedure calls (RPC). The method of IPC used may vary based on the bandwidth and latency of communication between the threads, and the type of data being communicated.
http://www.delphibasics.info/home/de...scommunication
.
IPC
Description Source Code: Source of program show how to create a component for communication between processes. Allows the exchange of information between the 32 and 64 bit processes, services, and isolated process (Low Level Integrity).
http://4coder.org/delphi-source-code/1009/
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: String via Sendmessage unvollständig

  Alt 8. Okt 2015, 16:25
Zitat:
Die fachlich gängige Lösung sind hier nunmal Threads.
Wirklich?

Ich mache es über eine Callback.. da benötige ich keine Threads.

gruss
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: String via Sendmessage unvollständig

  Alt 8. Okt 2015, 16:40
Zitat:
Die fachlich gängige Lösung sind hier nunmal Threads.
Wirklich?
Ich mache es über eine Callback.. da benötige ich keine Threads.
gruss
Es gibt ganz viele Wege nach Rom. Und jeder soll die Lösung wählen, die ihn glücklich macht.
Eines der im ersten Beitrag genannten Probleme war eben das Einfrieren der Anwendung, wenn das Internet mal wieder ein wenig braucht. Und da hilft allein ein Callback ja auch nicht, solange der bremsende Request im Main-Thread läuft.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.917 Beiträge
 
Delphi 12 Athens
 
#8

AW: String via Sendmessage unvollständig

  Alt 8. Okt 2015, 16:31
Inter-process communication (IPC)...
IPC...
Und was bitte soll uns nun diese lieblos dahingeworfene Linksammlung sagen?
Thomas Breitkreuz
  Mit Zitat antworten Zitat
Benutzerbild von Ajintaro
Ajintaro

Registriert seit: 20. Okt 2004
Ort: Sankt Augustin
138 Beiträge
 
Delphi XE6 Starter
 
#9

AW: String via Sendmessage unvollständig

  Alt 9. Okt 2015, 12:36
Inter-process communication (IPC)...
IPC...
Und was bitte soll uns nun diese lieblos dahingeworfene Linksammlung sagen?
Hallo nochmal,

das Problem der String Übertragung wurde wie gesagt gelöst, wobei das Einfrieren auch die Sekundäranwendung betrifft im Fall von SendMessage.
Dieser Artikel war dabei sehr hilfreich: Windows Messages Tutorial

Ich habe mir das IPC Beispiel mal angesehen und es würde all meine Probleme lösen, ich habe nur Schwierigkeiten es komplett zu verstehen. Ich bin euch für eure Unterstützung sehr dankbar!

Habt alle ein schönes Wochenende!
Jaimy
DAoC 2.0 -> Camelot Unchained !
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:37 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