AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Daten nach einem Pointer in einen String kopieren

Daten nach einem Pointer in einen String kopieren

Ein Thema von Amalkotey · begonnen am 30. Mär 2005 · letzter Beitrag vom 30. Mär 2005
Antwort Antwort
Benutzerbild von Amalkotey
Amalkotey

Registriert seit: 9. Feb 2004
Ort: Oberhausen
36 Beiträge
 
Delphi 2007 Enterprise
 
#1

Daten nach einem Pointer in einen String kopieren

  Alt 30. Mär 2005, 20:55
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:
  TBinaryParams = Record
    DataSize: LongInt;
    Data : Pointer;
  End;
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.

Mit bestem Gruss
Amalkotey
esdaS© - ESPRIT DATA SOFTWARE
[esdaS© := Software mit Charisma und Esprit]
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Daten nach einem Pointer in einen String kopieren

  Alt 30. Mär 2005, 21:16
Moin Amalkotey,

in welcher Form liegen denn die Bilddaten vor?
Um Speicherbereiche zu kopieren kannst Du, z.B., MSDN-Library durchsuchenCopyMemory verwenden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Amalkotey
Amalkotey

Registriert seit: 9. Feb 2004
Ort: Oberhausen
36 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Daten nach einem Pointer in einen String kopieren

  Alt 30. Mär 2005, 21:39
Zitat von Christian Seehase:
MSDN-Library durchsuchenCopyMemory verwenden.
Hallo Christian,

die Bilddaten liegen im JPG-Format vor. die CopyMemory-Procedure

procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD); 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.

Gruss
Amalkotey
esdaS© - ESPRIT DATA SOFTWARE
[esdaS© := Software mit Charisma und Esprit]
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Daten nach einem Pointer in einen String kopieren

  Alt 30. Mär 2005, 22:04
Moin Amalkotey,

ich verstehe jetzt nicht, wozu Du die Adresse des Strings setzen willst

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;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Amalkotey
Amalkotey

Registriert seit: 9. Feb 2004
Ort: Oberhausen
36 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Daten nach einem Pointer in einen String kopieren

  Alt 30. Mär 2005, 23:50
Hallo Christian,

danke für Deine Hilfe. Ich habe Dein Beipiel angepaßt und es funktioniert. Folgendes ist dabei entstanden:

Delphi-Quellcode:
  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;
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.

Gruss
Amalkotey
esdaS© - ESPRIT DATA SOFTWARE
[esdaS© := Software mit Charisma und Esprit]
  Mit Zitat antworten Zitat
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 22:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz