Toon posts:

[Delphi] 1 var in meerdere units.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een var nodig die ik in verschillende units kan gebruiken. In C++ zou ik dit als volgt doen:

C++:
1
extern int EenNummer;


In Delphi heb ik dit als volgt geprobeerd:
Delphi:
1
2
3
4
5
6
7
8
9
10
unit Unit1
bla bla bla

var
   Form1: TForm1;
   Conn: PChar;

implementation

bla bla bla


In een andere unit gebruik ik de var Conn dan als volgt:
Delphi:
1
2
3
4
5
6
unit Unit2
bla bla bla

  Unit1.Conn := PChar(Edit1.text);

bla bla bla


Dit alles compileerd zonder fouten, maar wanneer ik het run krijg ik zodra ik de code van Unit2 uitvoer een Access Violation. Ik krijg deze fout maar niet weg. Waar ga ik de fout in?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Je weet wel dat PChar niets anders is dan een pointer naar een Char? Dus dat als je de form waar Edit1 op staat sluit (vrij maakt) dat er dan een verwijzing in Conn staat die niet meer geldig is?

Je constructie is gewoon goed, daar ligt het zeker niet aan.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Dus dat als je de form waar Edit1 op staat sluit (vrij maakt) dat er dan een verwijzing in Conn staat die niet meer geldig is?
Ja precies, dat gebeurt er dus. Op welke manier krijg ik de waarde van edit1.text dan in conn. Het type van Conn moet eigenlijk WideString zijn.

Sorry voor deze waarschijnlijk eenvoudige vraag, maar delphi is als lang geleden.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Zo te zien ben je een C man en je moet dit dus net als in C oplossen door een copy te maken en Conn daar naartoe te laten verwijzen. En natuurlijk de laatste moet m weer vrij maken. Das allemaal wat lastig te bepalen voor een globale variable, maar goed :)

Makkelijker is het gewoon String (AnsiString) te nemen. Deze zijn reference counted en maken een automatisch een copy van zichzelf in deze gevallen.

WideStrings?
var Connn: WideString;
dan in dat geval :) Ben er alleen niet 100% zeker van of deze reference counted zijn zoals de AnsiStrings in Delphi, maar dat merk je gouw genoeg.

/edit Ben het even nagegaan en ja, WideStrings zijn ook reference counted...
/edit2 Eigenlijk zijn ze niet reference counted maar Delphi regelt het zo dat het eind effect hetzelfde is...

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

reference counted strings? :? onder delphi?
strings worden toch altijd gekopieerd bij assignments of zie ik dat nou verkeerd

[ Voor 0% gewijzigd door Verwijderd op 05-11-2002 09:42 . Reden: ow laat maar 'k zie je edit al :) ]


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Ook. Maar dan alleen als de string aangepast wordt. Als het de originele string blijft wordt ie gereference count. Extra efficient ivm geheugen ruimte :)

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

ow ok :) weer wat geleerd

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 05 november 2002 @ 09:40:
reference counted strings? :? onder delphi?
strings worden toch altijd gekopieerd bij assignments of zie ik dat nou verkeerd
AnsiString is altijd reference-counted, wat overigens niet helemaal de correcte term is voor de gebruikte techniek: dat is copy-on-demand.

Professionele website nodig?

Pagina: 1