AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Verschieben in einem Speicherbereich.
Thema durchsuchen
Ansicht
Themen-Optionen

Verschieben in einem Speicherbereich.

Ein Thema von shifter · begonnen am 15. Nov 2005 · letzter Beitrag vom 15. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2      
shifter

Registriert seit: 2. Jan 2005
175 Beiträge
 
Delphi 2007 Enterprise
 
#1

Verschieben in einem Speicherbereich.

  Alt 15. Nov 2005, 19:28
Hi,

erstmal Cod :
Delphi-Quellcode:
Var buf : Array [0..511] of Byte;
      s : String;
Begin
      s := 'Hallo Peng';
      MoveMemory( @buf, @s, SizeOf( s ));

...
Also ich brauche ein 512 Byte Langes Speicherbereich in dem ich aus einem Streamer Daten Lese und wieder auf dem Streamer Ausgebe. Es hat sich ganz gut bewertet die einfache methode mit dem Array um die 512 Bytes zu reservieren.

Jetzt aber möchte ich in diesen Speicher bereich was rein copieren / verschieben, irgend wie func. das nicht so richtig.
Wenn ich nach dem MoveMemory mir den buf angucke kommt nur sch... raus und nicht das was soll.

Was mache ich den Falsch ?

Ich habe schon versucht mit Pointern zu hantieren aber es Klapt alles nicht so Richtig.

Das mit dem String ist nur Beispiel, in wirkligkeit muss ich ein Type / Record in den Speicher hinein Verschieben.

Für eure hilfe bedanke mich in vorraus.

gruss
seba
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Verschieben in einem Speicherbereich.

  Alt 15. Nov 2005, 19:31
Length(s) ... nicht SizeOf

du willst ja die Länge des Strings und nicht die Größe des Zeigers auf diesen String ^^


[add]
Aber nimm lieber
MoveMemory(@buf, @s, Length(s) + 1); denn so wird auch die abschließende #0 mit kopiert, welche in der Länge nicht mitgezählt wird
$2B or not $2B
  Mit Zitat antworten Zitat
shifter

Registriert seit: 2. Jan 2005
175 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Verschieben in einem Speicherbereich.

  Alt 15. Nov 2005, 19:39
Hi,

danke für die Antwordt.

Es sieht schon Besser aus , aber es ist immer noch nicht das richtige, es steckt noch irgend wo ein wurm.

Es wird jetzt die entsprechende menge an daten angezeigt, aber nicht das was es sein soll.

Please Help !
  Mit Zitat antworten Zitat
stefan2005

Registriert seit: 30. Sep 2003
Ort: Puchheim
250 Beiträge
 
Delphi 6 Personal
 
#4

Re: Verschieben in einem Speicherbereich.

  Alt 15. Nov 2005, 19:42
hi,
liegt daran, dass die String-Variable s selbst nur ein Pointer auf eine Zeichenkette ist.
richtig muss es so heißen:
MoveMemory(@buf, Pointer(s), Length(s) + 1); mfg,
stefan
  Mit Zitat antworten Zitat
shifter

Registriert seit: 2. Jan 2005
175 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Verschieben in einem Speicherbereich.

  Alt 15. Nov 2005, 19:46
Ja das ist es ,

da ist aber noch was
Ich habe erwartet das am anfang von den 512 Bytes Langen Blocks wird es 'Hallo Peng' stehen und der rest solte mit $00 ausgefühlt sein, der ergebnis ist :

  • data: array[0..511] of byte = (
    $D0, $E6, $5A, $00, $70, $FF, $0F, $01, $58, $E5, $5A, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $14, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $F0, $FC, $0F, $01, $00, $00, $00, $00, $84, $FE, $0F, $01,
    $18, $EE, $91, $7C, $C8, $6A, $93, $7C, $FF, $FF, $FF, $FF, $BE, $6A, $93, $7C,
    $AD, $68, $93, $7C, $00, $00, $14, $00, $60, $00, $00, $40, $6D, $05, $92, $7C,
    $00, $00, $00, $00, $3D, $04, $92, $7C, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $CE, $33, $92, $7C, $A8, $E6, $00, $00,
    $E4, $FB, $0F, $01, $00, $00, $14, $00, $58, $FF, $0F, $01, $18, $EE, $91, $7C,
    $C0, $40, $92, $7C, $FF, $FF, $FF, $FF, $BB, $40, $92, $7C, $8E, $D6, $01, $00,
    $2C, $0B, $81, $7C, $D8, $FD, $0F, $01, $80, $00, $10, $C0, $58, $FF, $0F, $01,
    $18, $EE, $91, $7C, $70, $05, $92, $7C, $FF, $FF, $FF, $FF, $00, $00, $00, $00,
    $3D, $04, $92, $7C, $0C, $FF, $0F, $01, $75, $0B, $81, $7C, $00, $00, $00, $00,
    $38, $1E, $BC, $00, $14, $F8, $12, $00, $B0, $C4, $5B, $00, $18, $00, $00, $00,
    $00, $00, $00, $00, $F4, $FE, $0F, $01, $40, $00, $00, $00, $00, $00, $00, $00,
    $D8, $FE, $0F, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $0C, $00, $00, $00, $02, $00, $00, $00, $01, $01, $91, $7C, $00, $EC, $FD, $7F,
    $12, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $12, $00, $1A, $02,
    $F8, $0B, $15, $00, $00, $00, $00, $00, $F8, $0B, $15, $00, $01, $00, $00, $00,
    $DF, $E2, $80, $7C, $30, $FF, $0F, $01, $4F, $1A, $80, $7C, $48, $0F, $00, $00,
    $00, $00, $00, $C0, $03, $00, $00, $00, $00, $00, $00, $00, $03, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $70, $FF, $0F, $01, $A6, $E8, $5A, $00,
    $C4, $E8, $5A, $00, $00, $00, $00, $C0, $03, $00, $00, $00, $44, $C0, $5B, $00
    );
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: Verschieben in einem Speicherbereich.

  Alt 15. Nov 2005, 19:48
Nein, wenn du den Rest auch #0 haben willst, dann mußt du vorher deinen Puffer (buf) selber auf #0 setzten.

Aber ansonsten reicht es aus, wenn nach dem String eine einzige #0 steht.
$2B or not $2B
  Mit Zitat antworten Zitat
shifter

Registriert seit: 2. Jan 2005
175 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Verschieben in einem Speicherbereich.

  Alt 15. Nov 2005, 19:55
Kann mann den Puffer irgend wie auf anhib auf Null stellen oder muss ich byte für byte überschreiben ?

gruss
seba
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: Verschieben in einem Speicherbereich.

  Alt 15. Nov 2005, 20:00
procedure FillMemory(Destination: Pointer; Length: DWORD; Fill: Byte);
$2B or not $2B
  Mit Zitat antworten Zitat
shifter

Registriert seit: 2. Jan 2005
175 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Verschieben in einem Speicherbereich.

  Alt 15. Nov 2005, 20:04
Das ist es ,

Ich Bedanke mich beich allen für die Hilfe.

Gruss
Seba
  Mit Zitat antworten Zitat
shifter

Registriert seit: 2. Jan 2005
175 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Verschieben in einem Speicherbereich.

  Alt 15. Nov 2005, 20:13
Noch nicht Ganz fertig ,

Jetzt Habe Ich :
Delphi-Quellcode:
Type _SIGN = Record
  h : String[32];
  typ : Byte ;
  comp : Boolean;
End;

Var
   Sign : _SIGN;
   buf : Array [0.511] of Byte;

Begin

   FillMemory( @buf, 512, 0 );
   MoveMemory( @buf, xy , Sizeof( SIGN ));

...
Das mit dem String hat es 100%-ig funktioniert aber mit dem Record nicht mehr so doll.

Gruss
seba
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:16 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