AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array of pChar Abspeichern

Ein Thema von Cyrus1972 · begonnen am 1. Sep 2003 · letzter Beitrag vom 3. Sep 2003
Antwort Antwort
Cyrus1972

Registriert seit: 21. Jul 2003
6 Beiträge
 
#1

Array of pChar Abspeichern

  Alt 1. Sep 2003, 16:38
Hallo zusammen.

Ich habe da Folgenes Problem mit Delphi ich möchte Typisierte Dateien speichern und Einladen, das Abspeichern funktioniert anscheind wunderbar, das einladen jedoch macht mir immer wieder Exeptions wegen Bereichsprüfung oder Fehler bei zugriff auf Speicher.

Hier mal ein Beispiel (Aus dem Kopf)

Delphi-Quellcode:
Type pServer = ^tServer;
     tServer = Packed Record
     Version : integer;
     Servername : string[60];
     Bufferlen : integer; // Bufferlänge
     DescBuffer : array of PCHar; // Serverbeschreibung
end;
Wenn ich später die server speichern will mit FileWrite scheint der alles richtig abzuspeichern

Und so wird gespeichert

FileWrite(fh,MyServer^.Version,Sizeof(Integer));
FileWrite(fh,MyServer^.Servername,60);
FileWrite(fh,MyServer^.bufferlen,Sizeof(Integer));
FileWrite(fh,MyServer^.DescBuffer,myServer^.Buffer Len)

Jetzt wird es Heftig denn das einladen klappt hier nicht

Und so wird versucht einzuladen
FileRead(fh,MyServer^.Version,Sizeof(Integer));
FileRead(fh,MyServer^.Servername,60);
FileRead(fh,MyServer^.Bufferlen,Sizeof(Integer));
FileRead(fh,MyServer^.DescBuffer,myServer.BufferLe n);

Version,Servername,Bufferlen liest der richtig ein
den Descbuffer (Array of pChar) bekommt er nicht auf die Reihe.
Egal ob ich MyServer^.DescBuffer[0] oder 1 eingebe oder
es mit pChar(myServer.DescBuffer) (Mit und ohne ([])

Wer kann mir bei den Denkfehler weiterhelfen ??

Ich hab es nur ebend aus dem Kopf aufgeschrieben, damit man weiss was in etwa gemeint ist, bin gerade nicht zuhause sondern an einen Fremden PC.

Gruß und danke im Voraus
--
Windows kann alles dank 32bit.
Nach 32 Bit, glaube ich auch das ich alles kann
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Array of pChar Abspeichern

  Alt 1. Sep 2003, 17:59
Moin Cyrus,

bist Du Dir sicher, dass Du ein array of PChar an der Stelle brauchst?
Ein PChar ist ein Pointer auf einen Char also ein "normaler" 32 Bit Wert. Descbuffer ist also eine Liste von Pointern, und für mich sieht es so aus, als sollte das hier einfach ein PChar sein.

Probier doch mal das hier aus:

FileWrite(fh,MyServer.DescBuffer[0]^,myServer.BufferLen)
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
Cyrus1972

Registriert seit: 21. Jul 2003
6 Beiträge
 
#3

Re: Array of pChar Abspeichern

  Alt 1. Sep 2003, 20:11
Zitat von Christian Seehase:
Moin Cyrus,

FileWrite(fh,MyServer.DescBuffer[0]^,myServer.BufferLen)
Diese Variante habe ich auch schon ausprobiert.
Abgespeichert wird der Text ja schon richtig, nur beim Einladen gibt es später Probleme.

Ich habe deswegen ein Array of pChar versucht, weil manchmal sogar ein paar Kilobytes an Text dabei rumkommen.

Für ein Anderes Projekt habe ich ähnliches vorhaben mit Typisierten dateien, dort muss ich aber ein Buffer von 1k bis xMB zb verwalten können.
--
Windows kann alles dank 32bit.
Nach 32 Bit, glaube ich auch das ich alles kann
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Array of pChar Abspeichern

  Alt 1. Sep 2003, 21:24
Moin Cyrus,

das kommt jetzt bei Deinem Source nicht raus, aber das Du den Buffer vor dem Einlesen erst wieder initialisieren musst ist Dir schon klar?
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
Assarbad
(Gast)

n/a Beiträge
 
#5

Re: Array of pChar Abspeichern

  Alt 1. Sep 2003, 21:37
Ich würde die PChars sequentiell und durch #0 getrennt in eine Datei schreiben.
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#6

Re: Array of pChar Abspeichern

  Alt 1. Sep 2003, 21:44
Wie Christian schon sagte:
versuch mal:

Und so wird versucht einzuladen
FileRead(fh,MyServer^.Version,Sizeof(Integer));
FileRead(fh,MyServer^.Servername,60);
FileRead(fh,MyServer^.Bufferlen,Sizeof(Integer));
// hier kommt's:
GetMem(MyServer.DescBuffer,myServer.BufferLen);
FileRead(fh,MyServer^.DescBuffer,myServer.BufferLe n);
Tim Leuschner
  Mit Zitat antworten Zitat
Cyrus1972

Registriert seit: 21. Jul 2003
6 Beiträge
 
#7

Re: Array of pChar Abspeichern

  Alt 3. Sep 2003, 11:55
Zitat von Leuselator:
Wie Christian schon sagte:
versuch mal:

Und so wird versucht einzuladen
FileRead(fh,MyServer^.Version,Sizeof(Integer));
FileRead(fh,MyServer^.Servername,60);
FileRead(fh,MyServer^.Bufferlen,Sizeof(Integer));
// hier kommt's:
GetMem(MyServer.DescBuffer,myServer.BufferLen);
FileRead(fh,MyServer^.DescBuffer,myServer.BufferLe n);
Danke für die Bemühungen, ich hab es jetzt andersweitig hinbekommen.

Für diejenigen die es Interessiert

Delphi-Quellcode:
Type pServer = ^tServer
     tServer = packed Record
     Version : integer;
     DescSize : integer;
     Beschreibung : string;
     .
     . usw
end;
Schreiben In einem Stream Stream
Delphi-Quellcode:
 Daten.Write(MyServer^.Version,Sizeof(Integer));
 Daten.Write(MyServer^.DescSize,Sizeof(Integer));
 Daten.Write(pCHAR(MyServer^.Beschreibung)^,MyServer^.DescSize);
Lesen vom Stream
Delphi-Quellcode:
 Daten.Read(MyServer^.Version,Sizeof(Integer));
 Daten.Read(MyServer^.DescSize,Sizeof(Integer));
 SetLength(MyServer^.Beschreibung,MyServer^.DescSize);
 Daten.Read(pChar(myServer^.Beschreibung)^,MyServer^.DescSize);
Danke nochmals
--
Windows kann alles dank 32bit.
Nach 32 Bit, glaube ich auch das ich alles kann
  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 16:26 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