![]() |
StrPCopy() funktioniert nicht
Hallo zusammen,
leider finde ich keine Lösung, warm die Funktion "StrPCopy" nicht funktioniert. Ich versuche von einem String den Inhalt ins PChar zu laden:
Delphi-Quellcode:
Bei der StrPCopy-Funktion wird der Inhalt von dem String einfach nicht in das PChar kopiert!
...
Mem := TFileStream.Create(Filename, fmOpenRead); Data := StrAlloc(Mem.Size + 1); ZeroMemory(Data, Mem.Size); try i := 0; while Mem.Position < Mem.Size do begin Mem.Read(Buf, 1); S := S + Chr(Buf); Data[i] := Chr(Buf); Inc(i); end; StrPCopy(Data, S); ... finally StrDispose(Data); Mem.Free; end; Ich hoffe hier weiß jemand eine Lösung. Gruß, Moony |
Re: StrPCopy() funktioniert nicht
Hi,
also bei mir wird kopiert:
Delphi-Quellcode:
Allerdings brauchst du diesen Aufruf von StrPCopy() aus verschiedenen Gründen nicht: In deinem Code hast du Data[] schon innerhalb der Schleife befüllt und die Routinen um StrPCopy() sind auch nur noch aus Gründen der Abwärtskompatibilität vorhanden, da Borland AnsiStrings intern eh als PChar verwaltet. Da würde die Zuweisung s := data völlig ausreichen.
var
data: PChar; s: String; begin data := StrAlloc(6); ZeroMemory(data, 6); s := 'Hallo'; StrPCopy(data, s); ShowMessage(String(data)); StrDispose(data); end; Grüße vom marabu |
Re: StrPCopy() funktioniert nicht
Delphi-Quellcode:
Äh, versteh ich jetzt auch nicht so recht.
while Mem.Position < Mem.Size do
begin Mem.Read(Buf, 1); S := S + Chr(Buf); // <---<<< Data[i] := Chr(Buf); // <---<<< Inc(i); // <---<<< end; StrPCopy(Data, S);
Delphi-Quellcode:
Was ist denn Buf, ein Byte ? Und muss es PChar sein ?
GetMem(Data, Mem.Size +1);
Mem.Seek(soFromBeginning, 0); // ggf. Reset zu Pos 0 im File while Mem.Position < Mem.Size do begin Mem.Read(Buf, 1); S := S + Chr(Buf); end; StrCopy(Data, PChar(S)); // bzw. StrPCopy() oder MyPChar := @S[1]; FreeMem(Data); Sollte es doch tun, oder ? :gruebel: |
Re: StrPCopy() funktioniert nicht
Also,
@marubu: Das Data wird in der SChleife deshalb schon gefüllt, weil ich nicht weiß mit welchem Inhalt die Variable gefüllt wird. Anschließend überprüfe ich mit Hilfe einer Boolean-Variable was zu tun ist. und da muß ich eben bei einem bstimmten Fall die Daten aus s so wie Sie sind in das PChar bekommen, eben in HEX-Form. @turboPASCAL: Buf ist ein Byte. Es wird eben nicht kopiert. Dort sind die Daten enthalten, welche ursprünglich in der Schleife gefüllt wurden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 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