AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Problem beim Senden eines Records mit CopyDataStruct
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim Senden eines Records mit CopyDataStruct

Ein Thema von mac.cat · begonnen am 24. Nov 2007 · letzter Beitrag vom 24. Nov 2007
Antwort Antwort
Muetze1
(Gast)

n/a Beiträge
 
#1

Re: Problem beim Senden eines Records mit CopyDataStruct

  Alt 24. Nov 2007, 01:23
WM_COPYDATA kopiert nur das, wohin lpData in deiner Applikation zeigt in der Größe, wie es cbData angibt. Dein Record enthält aber Strings und die haben eine Variable länge und werden dort nur als Adresse (in deinem lokalen Speicher) abgelegt. Somit versendest du nur 4 Adressen welche in deiner Applikation gültig sind, aber beim Empfänger selber steht dort Müll (wenn überhaupt). Du versendest also nicht die Daten selber, sondern nur Pointer. Du kannst ja mal überprüfen was SizeOf() dir für den Record ausgibt, der Debugger dürfte dir da auch nur mickrige 20 Bytes ausgeben - und das ist für 4 Strings und ein Handle eindeutig zu wenig. Das wäre aber mal eine wirklich gute Kompression, weil diese Grösse ändert sich nicht, egal wieviel zu zuweist. Ein Record hat die Eigenschaft zur Laufzeit eine konstante Grösse zu haben.

Abhilfe: Lege entweder eine definierte variable Struktur im Speicher an, wo die Strings nacheinander folgen und du sie auch sicher wieder trennen kannst. Diesen kompletten Speicherbereich kannst du dann versenden. Das wird dann aber nicht mit einerm Record funktioniert, da dieser - wie schon gesagt - konstant ist. Andere Möglichkeit: beschränke dich auf eine maximale Stringlänge. Dann definiere diese als die Grösse der Strings und sie würden auch an Ort und Stelle in dem Record liegen. Gutes Beispiel für ein 255 Zeichenstring wäre der ShortString. Für die letzte Methode bräuchtest du nur die Record-Definition ändern und string durch ShortString ersetzen. Damit wird dann dein Record ungemein grösser (siehe SizeOf()), aber auch die Strings dürfen nur noch maximal 255 Zeichen enthalten.

/EDIT: In deinem Tutorial wird auch ein String[255] genutzt (entspricht genau dem ShortString) und darin liegt der Grund.
  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 09:15 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