Avatar billede f2f4 Novice
11. maj 2006 - 15:59 Der er 4 kommentarer og
1 løsning

Pointere til records

Nedenstående kode er nok lidt kryptisk …, men er den korrekt udformet vedr. brug at pointer og record??? (Pointeren herunder er overflødig, men spørgsmålet går på om brugen er korrekt udformet!)

Psudokode
1)    Modtager x recort fra en dll,
2)    disse record tilføjes løbende i en liste, og
3)    til slut bruges og frigøres disse samlet.

type
  TDllRec = Record
    A: double;
    B: double;
  PTDllRec = ^ TDllRec;
var
  DllRec: TDllRec;
  List: TList;
begin
  For i:= 0 to abc do //abc … en eller anden variable værdi
  begin
    DllRec = BeregnAB(); //dll kald der returnerer en record
    new(PTDllRec);
    PTDllRec^:= DllRec;
    List.Add(PTDllRec);
  end;
  ::
  for i:= 0 to List.Count-1 do
  begin
    TilfoejRecord(  TDllRec(List[i]^)  ); //procedure der behandler recorden
    Dispose(List[i]);
  end;
end;

Tak for svar. Beklager hvis der først kommer svar igen herfra på mandag.

/Morten
Avatar billede nico26 Nybegynder
12. maj 2006 - 20:05 #1
new(PTDllRec); dette dur ikke

PTDllRec er en type - du skal erklære en variabel af denne type, og kalde new med denne variabel

var
  myptr: PTDllRec;

...

New(myptr);


ellers ser din kode ok ud (jeg har ikke lige Delphi på denne computer så jeg kan ikke teste det).


nico
Avatar billede nico26 Nybegynder
12. maj 2006 - 20:07 #2
PTDllRec^:= DllRec; dette dur selfølgelig heller ikke af samme årsag som ovenfor

type
  TDllRec = Record
    A: double;
    B: double;
  PTDllRec = ^ TDllRec;
var
  DllRec: TDllRec;
  myptr: PTDllRec;
  List: TList;
begin
  For i:= 0 to abc do //abc … en eller anden variable værdi
  begin
    DllRec = BeregnAB(); //dll kald der returnerer en record
    new(myptr);
    myptr := DllRec;
    List.Add(myptr);
  end;
  ::
  for i:= 0 to List.Count-1 do
  begin
    TilfoejRecord(  TDllRec(List[i]^)  ); //procedure der behandler recorden
    Dispose(List[i]);
  end;
end;
Avatar billede nico26 Nybegynder
13. maj 2006 - 14:57 #3
fandt lige en fejl mere i din record-erklæring



type
  TDllRec = Record
    A: double;
    B: double;
  end;
  PTDllRec = ^TDllRec;
var
  DllRec: TDllRec;
  myptr: PTDllRec;
  List: TList;
begin
  For i:= 0 to abc do //abc … en eller anden variable værdi
  begin
    DllRec = BeregnAB(); //dll kald der returnerer en record
    new(myptr);
    myptr^ := DllRec;
    List.Add(myptr);
  end;
  ::
  for i:= 0 to List.Count-1 do
  begin
    TilfoejRecord(  TDllRec(List[i]^)  ); //procedure der behandler recorden
    Dispose(List[i]);
  end;
end;
Avatar billede f2f4 Novice
15. maj 2006 - 10:08 #4
>nico26
Mange tak, vi er helt enige, giv endelig et svar!
Avatar billede nico26 Nybegynder
15. maj 2006 - 11:15 #5
svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester