Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi an Formular übergebener Pointer ist nil (https://www.delphipraxis.net/71610-formular-uebergebener-pointer-ist-nil.html)

Hazardos 18. Jun 2006 13:04


an Formular übergebener Pointer ist nil
 
Hallo @ all...

Ich übergebe einen pointer der in der Unit eines formulares deklariert ist an ein anderes Formular. Dabei geht die Speicherzuweisung irgendwie verloren... Das Ergebnis ist nil obwohl dies eigentlich nciht sein sollte, was muss ich beachten wenn ich eine solche operation vornehme?

MfG Jörn

semo 18. Jun 2006 13:05

Re: an Formular übergebener Pointer ist nil
 
ein bissl quelltext wäre nett oder?

Hazardos 18. Jun 2006 13:23

Re: an Formular übergebener Pointer ist nil
 
okay ist ja gut... ich dachte ich hätte es unmissverständlich formuliert...

Delphi-Quellcode:
unit Unit1;
...

type
  Zeiger : ^Daten;
  Daten = record
...
var element : zeiger;
...
Daten sind werte zugewiesen und der Pointer element ist bestimmt, abruf gibt korrekte ausgabe.
Das Formular wird erzeugt und der Pointer Element von Unit1 wird auf element von unit2 übertragen, oder eben nicht, da der pointer bei nachfolgendem abruf in unit2 nicht zugewiesen ist.

Delphi-Quellcode:
unit Unit2;
...
public
  Element : Zeiger;
...

TBx 18. Jun 2006 13:48

Re: an Formular übergebener Pointer ist nil
 
Zitat:

Zitat von Hazardos
Daten sind werte zugewiesen und der Pointer element ist bestimmt, abruf gibt korrekte ausgabe.
Das Formular wird erzeugt und der Pointer Element von Unit1 wird auf element von unit2 übertragen, oder eben nicht

Wie wärs, wenn Du uns mal zeigen würdest, wie Du das machst?
Wie sollen wir Dir sagen, wo Dein Fehler liegt, wenn Du uns nicht verrätst, was Du tust?
Das was Du gepostest hast, sieht aus, wie extra konstruierte Beispieldeklarationen.
Poste doch mal die entsprechenden Stellen aus Deinem Originalquelltext. Sonst muß ich mir erst ne Glaskugel kaufen....

Gruß

onlinekater

Hazardos 18. Jun 2006 14:05

Re: an Formular übergebener Pointer ist nil
 
Unit 1
Delphi-Quellcode:
...
type
  Element = ^TDaten;
  TDaten=Record
    index : Integer;

    Zeit : TDateTime;
    Kopf : String;    //Zeichenzahl : byte
    Text : String;    //Zeichenzahl : word

    Next,Prev : Element;
  end;

...

var Anfang, Ende, tmp : Element;

...

New (Anfang);
tmp^.index := i;
...
tmp^.Prev := Ende;
Ende^.next := tmp;
...

procedure KnopfDrück;
begin
Form2 := tForm2.create (self);
Form2.Anfang := Anfang;
end;
Unit2
Delphi-Quellcode:
...
type
...
  public
    Anfang, Ende, Current : Element;

procedure oncreate;
begin
  showmessage (Anfang^.text); //AV => Anfang = nil
end;
das dürfte das wichtigste gewesen sein... an manchen stellen vereinfacht, da die ganze streamgeschichte die da noch mit drin hängt nicht relevant ist und es so übersichtlicher ist...

Hazardos 18. Jun 2006 14:09

Re: an Formular übergebener Pointer ist nil
 
auch wenn ich die variabeln in Unit1 unter public deklariere, kann ich unitintern damit arbeiten... nur das Weitere führt dann zu einer AV

3_of_8 18. Jun 2006 14:11

Re: an Formular übergebener Pointer ist nil
 
Na überleg mal: Du erzeugst zuerst die Form (TForm2.Create) und weist dann den Pointer zu.

Aber bevor du den Pointer zuweist, wird schon in OnCreate auf ihn zugegriffen. Du musst ins OnCreate die Zuweisung reinschreiben.

Hazardos 18. Jun 2006 14:25

Re: an Formular übergebener Pointer ist nil
 
das bringt das gleiche ergebnis... hab ich auch schon dran gedacht und ausprobiert....
aebr hast recht, so ist das totaler mist... ;-) klar...

semo 18. Jun 2006 14:29

Re: an Formular übergebener Pointer ist nil
 
bisher:
Delphi-Quellcode:
procedure KnopfDrück;
begin
  Form2 := tForm2.create (self);
  Form2.Anfang := Anfang;
end;
besser:
Delphi-Quellcode:
procedure KnopfDrück;
begin
  Form2 := tForm2.create (self);
  Form2.Anfang := Anfang;

  ShowMessage(Form2.Anfang^.text);
end;
//bzw. eine weitere Methode in Form2 deklarieren + definieren, mit der du dann weiterarbeitest
// Beispiel:
Delphi-Quellcode:
procedure KnopfDrück;
begin
  Form2 := tForm2.create (self);
  Form2.Anfang := Anfang;
  Form2.weitereMethode();
end;
Form2:
Delphi-Quellcode:
procedure weitereMethode();
begin
  ShowMessage(Anfang^.text));
end;

Hazardos 18. Jun 2006 14:31

Re: an Formular übergebener Pointer ist nil
 
Ich habs grade nochmal umgeschrieben, und ich weiß nicht woran es lag.... anscheinend hab ich vorher ne kleinigkeit falsch gemacht, aber jetzt geht es so... seltsam... okay dankeschön für eure hilfe....

@ 3_of_8 hattest recht... !

:wall: ;)

Gruß Jörn


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:02 Uhr.
Seite 1 von 2  1 2      

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