Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   haben wir schon Ostern ? - wer findet den Fehler ? (https://www.delphipraxis.net/213935-haben-wir-schon-ostern-wer-findet-den-fehler.html)

paule32.jk 21. Okt 2023 21:26

AW: haben wir schon Ostern ? - wer findet den Fehler ?
 
@mytbo: wenn ich mich an Deinen Code halte:


showmessage('size 2: ' + inttostr(sizeof(instructions))); // hier erhalte ich: 4
SetLength(insArr, 2);
insArr[0].f := Lit;
insArr[1].f := Jmp;
ins := @Instructions[0]; // hier knallts

...
var
FSize: Integer;
FileStream: TFileStream;

FileStream := TFileStream.Create('test.bin', fmOpenRead);
SetLength(Instructions,FSize div sizeof(TInstruction));
FileStream.Read(Instructions, FileStream.Size); // length: 24

mytbo 21. Okt 2023 22:04

AW: haben wir schon Ostern ? - wer findet den Fehler ?
 
Du verwendest verschiedene Techniken. Dann musst du so schreiben:
Delphi-Quellcode:
type
  TOpCode = (ocLit, ocOpr, ocLod, ocSto, ocCal, ocInt, ocJmp, ocJpc, ocWri);
  TInstruction = record
    f: TOpCode; // command
    l: Byte; // level
    a: Integer; // address
  end;
  PInstruction = ^TInstruction;

  TInstructions = array of PInstruction;

var
  ins: PInstruction;
  insArr: TInstructions;
begin
  SetLength(insArr, 2);

  GetMem(ins, SizeOf(TInstruction));
  insArr[0] := ins;
  ins.f := ocLit;

  GetMem(ins, SizeOf(TInstruction));
  insArr[1] := ins;
  ins.f := ocJmp;

  for var i: Integer := Low(insArr) to High(insArr) do
    ShowMessage(Format('OpCode: %s', [System.TypInfo.GetEnumName(TypeInfo(TOpCode), Ord(insArr[i].f))]));

  for var i: Integer := Length(insArr) - 1 downto 0 do
    FreeMem(insArr[i]);
Alternativ so:
Delphi-Quellcode:
var
  ins: PInstruction;
  insArr: TInstructions;
  insBufferSize: Integer;
begin
  SetLength(insArr, 2);

  insBufferSize := SizeOf(TInstruction) * Length(insArr);
  GetMem(ins, insBufferSize);
  insArr[0] := ins;
  ins.f := ocLit;

  Inc(ins);
  insArr[1] := ins;
  ins.f := ocJmp;

  for var i: Integer := Low(insArr) to High(insArr) do
    ShowMessage(Format('OpCode: %s', [System.TypInfo.GetEnumName(TypeInfo(TOpCode), Ord(insArr[i].f))]));

  FreeMem(insArr[0], insBufferSize);
Oder so wie in meinem letzten Post, aber du kannst es nicht beliebig mischen. Die Variante aus dem ersten Post wäre mein Favorit.

Bis bald...
Thomas

zeras 21. Okt 2023 22:54

AW: haben wir schon Ostern ? - wer findet den Fehler ?
 
Nur mal so.
Was würde ChatGPT dazu sagen?

himitsu 22. Okt 2023 10:30

AW: haben wir schon Ostern ? - wer findet den Fehler ?
 
Warum immer wieder neue Threads,
https://www.delphipraxis.net/213934-...ppt-nicht.html
https://www.delphipraxis.net/213935-...-new-post.html
https://www.delphipraxis.net/213937-...-new-post.html
anstatt das eigentliche Problem endlich zu lösen?
https://www.delphipraxis.net/213929-...ml#post1528456

Olli73 22. Okt 2023 11:34

AW: haben wir schon Ostern ? - wer findet den Fehler ?
 
Probier Mal

Delphi-Quellcode:
BlockRead(bcFile,Instructions[0],FSize);
anstatt

Delphi-Quellcode:
BlockRead(bcFile,Instructions,FSize);

Olli73 1. Nov 2023 12:53

AW: haben wir schon Ostern ? - wer findet den Fehler ?
 
Zitat:

Zitat von Olli73 (Beitrag 1528525)
Probier Mal

Delphi-Quellcode:
BlockRead(bcFile,Instructions[0],FSize);
anstatt

Delphi-Quellcode:
BlockRead(bcFile,Instructions,FSize);

Hattest du das eigentlich Mal ausprobiert?

paule32.jk 1. Nov 2023 13:04

AW: haben wir schon Ostern ? - wer findet den Fehler ?
 
nein, noch nicht.
Ich hatte in der Zwischenzeit mit einen Pascal-Compiler sowie AsmJit gewerkelt.
Danke für Deinen Vorschlag !


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.
Seite 2 von 2     12   

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