[CPP Builder] Variabelen Probleem

Pagina: 1
Acties:

  • Cryothic
  • Registratie: September 2001
  • Laatst online: 04-09-2024
Hoi,

ik heb een probleem met een projectje.
Ik ben nog een c++ newbie, dus alvast mijn excuses als ik het een beetje rot uitleg.

Het probleem is als volgt:
Ik heb op Unit1.cpp een aantal variabelen (onder public in unit1.h).
In de form-create geeft ik die variabelen een waarde.

Na de form create van form1 wordt form2 ge-creerd.
In de form-create van form2 wil ik die variabelen ophalen van form1.
Maar de waarde van die variabelen is dan NULL.

Als ik ga debuggen, blijkt dat die variabelen de waarde NULL krijgt na de form-create van form1. Als ie __fastcall gaat doen.

Heeft iemand enig idee hoe die mij kan helpen?
Alvast bedankt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:48
Geef eens wat code. (enkel de relevante code please).

https://fgheysels.github.io/


  • Cryothic
  • Registratie: September 2001
  • Laatst online: 04-09-2024
Nou, ik heb dus een breakpoint staan op de form create.
Dan doe ik StepOver kom ik uiteindelijk hier terug:

code:
1
2
/* TCustomForm.Create */ inline __fastcall virtual TForm(Classes::TComponent*
 AOwner) : TCustomForm(AOwner) { }


Dan heeft de variabele nog zijn waarde.
Als ik dan nog een keer op F8 druk, kom ik hier.

code:
1
2
3
4
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}


En dan is ie z'n waarde kwijt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:48
Ja, met die code zijn we eigenlijk niets hoor. Het enige wat je post zijn de functie headers. Staat er dan geen code in die functies? Code die je zelf geschreven hebt?

Wat staat er in de FormCreate van TForm1?

Wat gebeurt er precies tussen de FormCreate van TForm1 en de FormCreate van TForm2?

https://fgheysels.github.io/


  • Cryothic
  • Registratie: September 2001
  • Laatst online: 04-09-2024
Unit1.cpp (form1)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    StatusBar1->Panels->Items[0]->Text = "Initializing programm...";

    TIniFile *pIniFile = new TIniFile(ExtractFilePath(Application->ExeName)
+ "\\PBG.INI");

    sWorkDir = pIniFile->ReadString("Directory", "workdir", NULL);
    sPoolDir = pIniFile->ReadString("Directory", "pooldir", NULL);

    delete pIniFile;

    if (!Table1->Active) Table1->Open();

    StatusBar1->Panels->Items[0]->Text = "Waiting...";


}

Hier krijgen de variabelen dus hun waarden (sWorkDir en sPooldir)

Daarna komt ie hier:
Forms.hpp
code:
1
2
3
/* TCustomForm.Create */ inline __fastcall virtual TForm(Classes::TComponent* 
AOwner) : TCustomForm(
                   AOwner) { }



En daarna hier:
Unit1.cpp (form1)
code:
1
2
3
4
5
6
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------


En dat laatste stukje is alles. Die is gewoon leeg.
En zodra die daarin komt is m'n variabele Null.

Misschien heb je hier nog wat aan:
Unit1.h
code:
1
2
3
4
5
6
7
8
9
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);


    AnsiString sPoolDir;
    AnsiString sWorkDir;

    void *buffer;
};

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:48
Hoe weet je dat die variablen leeg zijn precies als je in de constructor komt?

https://fgheysels.github.io/


  • Cryothic
  • Registratie: September 2001
  • Laatst online: 04-09-2024
Omdat ik een Watch zet op Form1->sWorkDir
En nadat ie z'n waarde gekregen heeft, staat daar keurig "F:\PBG"
Maar zodra ik dus in die constructor kom, staat er NULL.

En na die Construstor gaat ie naar de form-create van Form2, en daar is ie ook Null
:(

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:48
En als je nu die variablen eens een waarde geeft in de constructor?

https://fgheysels.github.io/


  • Cryothic
  • Registratie: September 2001
  • Laatst online: 04-09-2024
Zo te zien werkt dat wel.

Enorm bedankt.
Pagina: 1