Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi PChar, String und abgeschnittene Ergebnisse (https://www.delphipraxis.net/84759-pchar-string-und-abgeschnittene-ergebnisse.html)

Zacherl 21. Jan 2007 12:17


PChar, String und abgeschnittene Ergebnisse
 
Hi,

folgendes Problem: Ich habe eine Datei, die ich in einen MemoryStream lade und den Inhalt dann in einen String, so dass die Datei praktisch im String drin steht.

Bei dieser Stelle ist die Datei auch noch komplett. Wandle ich den String jetzt in einen PChar um, wird ab einer gewissen Stelle alles vom eigentlichen String abgeschnitten? Woher kommt das?

Florian

mkinzler 21. Jan 2007 12:22

Re: PChar, String und abgeschnittene Ergebnisse
 
Was für ein Zeichen steht an der Stelle?

r2c2 21. Jan 2007 12:24

Re: PChar, String und abgeschnittene Ergebnisse
 
Zitat:

Zitat von mkinzler
Was für ein Zeichen steht an der Stelle?

meine Glaskugel sagt, da steht ein #0...

==> nimm n Array[0..size -1] of Byte oder n PByte mit manueller Speicherverwaltung...

mfg

Christian

Zacherl 21. Jan 2007 12:30

Re: PChar, String und abgeschnittene Ergebnisse
 
#0 ist sehr gut denkbar, weil ich eine Binärdatei einlese. Das Problem ist, dass ich die Datei erst als String haben, muss, um diesen zu encodieren und dann den encodierten String als PChar benötige, um ihn in eine Resource zu schreiben.

Klingt etwas umständlich die Datei erst in einen String zu schreiben und zu encodieren, muss aber sein.

mkinzler 21. Jan 2007 12:32

Re: PChar, String und abgeschnittene Ergebnisse
 
Meine Vermutung ging in die selbe Richtung, ersetze mal die #0 durch z.B. #32.

Zacherl 21. Jan 2007 12:35

Re: PChar, String und abgeschnittene Ergebnisse
 
Ich darf die Daten innerhalb des Strings nicht verändern. Ich selber hatte auch auf ein #0 getippt. Ich muss den String nur irgendwie nach dem encodieren als Pointer haben, so dass ich UpdateResource aufrufen kann.

mkinzler 21. Jan 2007 12:37

Re: PChar, String und abgeschnittene Ergebnisse
 
Dann lade sie doch in einen Buffer und übergebe einen Pointer auf diesen

SirThornberry 21. Jan 2007 12:44

Re: PChar, String und abgeschnittene Ergebnisse
 
wie wandelst du das ganze zu einem PChar? Ich denke mal du musst der Funktion zum überschreiben einen Pointer übergeben. Dabei spielt es auch keine Rolle ob es ein typisierter Pointer ist oder nicht. Zusätzlich denke ich das du der Funktion auch dei Größe der Daten mitgibst und da wird einfach dein Fehler sein.

marabu 21. Jan 2007 12:44

Re: PChar, String und abgeschnittene Ergebnisse
 
Hallo Florian,

wenn das Encoding inplace stattfindet, dann lade die Daten in einen StringStream und verwende @DataString[1] für UpdateResource(). Dort wird kein PChar benötigt, da eine Größenangabe mit übergeben werden muss.

Grüße vom marabu

MrKnogge 21. Jan 2007 12:47

Re: PChar, String und abgeschnittene Ergebnisse
 
Zitat:

Zitat von SirThornberry
Zusätzlich denke ich das du der Funktion auch dei Größe der Daten mitgibst

Warum sollte man bei einem 0-Terminierten-String die Größe mitgeben müssen ?

Gruß

marabu 21. Jan 2007 12:56

Re: PChar, String und abgeschnittene Ergebnisse
 
Hallo Christian,

UpdateResource() verlangt keinen PChar als Parameter, es wird ein Speicherbereich übergeben - Adresse und Größe.

Freundliche Grüße

MrKnogge 21. Jan 2007 13:01

Re: PChar, String und abgeschnittene Ergebnisse
 
Ich rede von der Übergabe an seine Encode-Funktion. Bis zum UpdateResource schafft er es doch gar nicht.

Zacherl 21. Jan 2007 13:02

Re: PChar, String und abgeschnittene Ergebnisse
 
Außerdem ist PChar ein Pointer :D

Ich versuche jetzt mal meine Verschlüsselungsfunktion so umzuschreiben, dass sie direkt den Pointer verschlüsselt.

Vielen Dank euch schonmal!

mkinzler 21. Jan 2007 13:06

Re: PChar, String und abgeschnittene Ergebnisse
 
Zitat:

Außerdem ist PChar ein Pointer Very Happy
An sich schon, nur Prozeduren/Funktionen die einen PChar als Parameter erwarten interpretieren den Inhalt des Speichers auf den der Zeiger weist, so daß bestimmte Werte (#0) als Ende interpretiert werden. Ein PChar ist also nicht zum Aufnehmen von binären Inhalten geeignet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:51 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 by Thomas Breitkreuz