![]() |
Daten nach einem Pointer in einen String kopieren
Hallo DPler,
ich beschäftige mich z. Zt. mit der Entwicklung eines Programmes, welches unsere Mitarbeiter verwaltet und in eine FreeBase-Datenbank (FreeBase-Komponente von Rainer Reusch & Toolbox-Verlag) speichert. Neben den einzelnen String-Daten soll auch ein Passbild des Mitarbeiters gespeichert werden. Die Speicherung erfolgt in dem Record "TBinaryParams".
Delphi-Quellcode:
Damit wir mit dem Bild auch arbeiten können, ist es notwendig, die Bilddaten in eine String-Variable zu kopieren. Irgendwie schein das nicht zu funktionieren. Wie kann ich einer String-Variable die Daten zuweisen bzw. die Adresse auf die Adresse des Pointers setzen? Danke für eure Hilfe im voraus.
TBinaryParams = Record
DataSize: LongInt; Data : Pointer; End; Mit bestem Gruss Amalkotey |
Re: Daten nach einem Pointer in einen String kopieren
Moin Amalkotey,
in welcher Form liegen denn die Bilddaten vor? Um Speicherbereiche zu kopieren kannst Du, z.B., ![]() |
Re: Daten nach einem Pointer in einen String kopieren
Zitat:
die Bilddaten liegen im JPG-Format vor. die CopyMemory-Procedure
Delphi-Quellcode:
kann ich nicht verwenden, da diese als Ziel wieder einen Pointer wünscht. Mein Problem ist es, das ich nicht weiß, ich die Speicher-Adresse des Strings ermitteln und setzen kann.
procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD);
Gruss Amalkotey |
Re: Daten nach einem Pointer in einen String kopieren
Moin Amalkotey,
ich verstehe jetzt nicht, wozu Du die Adresse des Strings setzen willst :gruebel: Zugreifen kannst Du mit: @StringVariable[1] Falls Du die Adresse setzen willst, um den Wert wieder auszulesen: Nimm eine Stringvariable, und setze deren Länge auf die erforderliche Grösse (SetLength oder StringOfChar). Anschliessend kannst Du dann auf oben genanntem Wege die Adresse des ersten Zeichens ermitteln, und den String füllen. Mal ein Beispiel:
Delphi-Quellcode:
var
sSource : string; sDest : string; dwSize : DWORD; begin dwSize := 10; sSource := StringOfChar('A',dwSize); SetLength(sDest,dwSize); CopyMemory(@sDest[1],@sSource[1],dwSize); ShowMessage(sDest); end; |
Re: Daten nach einem Pointer in einen String kopieren
Hallo Christian,
danke für Deine Hilfe. Ich habe Dein Beipiel angepaßt und es funktioniert. Folgendes ist dabei entstanden:
Delphi-Quellcode:
Da auch Gehaltsabrechnungen und sonstige Dokumente in der FreeBase-Datenbank gespeichert werden, ist die Vorgabe, dass die Daten verschlüsselt werden sollen. Da es jetzt bei den Mitarbeiter-Fotos korrekt funktioniert, kann ich die Funktion auch für die Dokumenten-Verschlüsselung verwenden. Nochmals Danke, und eine angenehme Nachtruhe.
Function SetBinaryCipher(Modus: Integer; Argument: Pointer; DataSize: Integer; pwKey: String): Pointer;
Var Buffer: String; Begin SetLength(Buffer, DataSize); CopyMemory(@Buffer[1], Argument, DataSize); With TCipher_Blowfish.Create(pwKey, NIL) Do Begin Try Mode := TCipherMode(0); Case Modus Of FBDecode: Buffer := CodeString(Buffer, paDecode, 1); // Entschlüsseln FBEncode: Buffer := CodeString(Buffer, paEncode, 1); // Verschlüsseln End; Finally Free; End; End; CopyMemory(Argument, @Buffer[1], DataSize); Result := Argument; End; Gruss Amalkotey |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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