Gå til innhold

Anbefalte innlegg

ok folkens har en liten greie her jeg gjerne vil forstå

 


procedure demoProcedure(TheForm: TForm);

begin

 MessageBox(TheForm.Handle,'Hello, this is from a DLL','Title of box',MB_OK Or MB_ICONEXCLAMATION);

end;

 

har denne funksjonen i en dll fil.

når jeg da skal hente opp denne i mitt main-program så sender jeg dette kallet i en eller annen button-click

 


demoProcedure(self);

 

men det jeg lurer på er den parameteren som blir sendt over til dll-filen.

oppretter dll-filen da en hel kopi av formen? jeg prøvde å skrive "var" foran parameteren slik at man kun lager en referanse til objektet, men da fikk jeg access violation error..

[/code]

Lenke til kommentar
Videoannonse
Annonse

Alle objekt-variabler i delphi er pekere til objektet. Dvs at når du overfører en form slik du har gjort det, overføres det kun en peker til formen.

 

Skriver du 'var' forran i ditt tilfelle gir det deg mulighet til å endre pekeren som overføres. F.eks. hvis dll-en inneholdt tre instanser av en form og du ønsker å hente ut referanse til den neste ledige instansen (hva nå enn det skulle være godt for...) kunne du ha en metode så her:

 


procedure GetNextFreeInstance(var aform: TForm);

begin

 if ledig(form1) then

   aform := form1

 else if ledig(form2) then

   aform := form2

 else if ledig(form3) then

   aform := form3

 else

   aform := nil;

end;

 

Fatte?

 

Var nok ikke så godt forklart, men poenget er at intet kopieres og at du ikke skal trenge noe 'var' i deklerasjonen din.

 

-Vegar

Lenke til kommentar

fungerer dette på samme måte andre veien også?

si hvis du har denne i en .dll:

 


function dittogdatt: TPanel;

Result := TPanel;

 

så tar du imot panelet i hovedprogrammet ditt.

er dette bare en peker som blir overført her også?

Lenke til kommentar
fungerer dette på samme måte andre veien også?

si hvis du har denne i en .dll:

 


function dittogdatt: TPanel;

Result := TPanel;

 

så tar du imot panelet i hovedprogrammet ditt.

er dette bare en peker som blir overført her også?

 

Yupp! Altid en peker.

 

Se om du får fatt på Delphi In A Nutshell fra O'Reilly. Den har et knallbra kapittel med navn "The Delphi Object Model". Det er uansett en 'må ha' bok for delphiprogrammerere. (en oppslagsbok - ingen lærebok...)

 

-Vegar

Lenke til kommentar

hmm.. ja det hadde jo vært kjekt å få med seg den boka, men jeg har allerede en sånn oppslagsbok her på jobben som jeg har begynt å titte litt på. "Delphi 7 Developer's guide" heter den.

 

Har tenkt å investere i noen bøker nå, og det ser ut som om det kan bli disse to:

 

Tomes of Delphi: Alghoritms & Datastructures (den som du anbefalte)

 

Developing Web and .NET Distributed Applications with Delphi

-men denne kommer ikke før første oktober

Lenke til kommentar

Tomes of Delphi: Alghoritms & Datastructures (den som du anbefalte)

Developing Web and .NET Distributed Applications with Delphi

-men denne kommer ikke før første oktober

 

Ser ut som to utmerkede valg.

 

Vet jo ikke med den siste, men tittelen var definitivt interessant. Må nok snakke litt med han som sitter på pengesekken på jobb... ;-)

 

Når det gjelder Delphi Developers Guide vs Delphi in a nutshell tror jeg det er snakk om to ganske forskjellige bøker. Mens Delphi Developers Guide er en litt "Se hvor stor og feit bok jeg klarer å skrive"-bok (men en god en sådan...), går nutshell boka i dybden på noen få tema (objektmodellen, RTTI og tråder), samt at den har ordentlig oppslag på absolutt alt i runtime-biblioteket, samt store deler (om ikke alt?) av SysUtils.

 

Men gå for algoritmeboka. Den er kjempe bra!

 

-Vegar

Lenke til kommentar
  • 3 uker senere...

men et spørsmål til.

 

hvordan fungerer dette med TADOQuery objektet?

 

hvis jeg sender denne over som parameter (uten 'var' ordet) i en metode, vil metoden få `kopiert en helt lik query, eller er det referanse i dette tilfellet også? så QUEryet som ble sendt inn i metoden kan ha fått andre verdier når metoden er ferdig kjørt?

Lenke til kommentar

takker for svar format71. :)

Du er virkelig en stor ressurs her på forumet

 

men jeg har et spørsmål til. vet ikke om det passer inn i tråden men..

 

hva er forskjellen på disse:

 

-MyObject := TMyObject.Create(nil);

 

-MyObject.Create;

 

jeg pleier alltid å bruke det første alternativet, men har sett at jeg får opp muligheten for å skrive det siste alternativet. Går det an å skrive den siste istedet for den første? er det akkurat samme som skjer?

Lenke til kommentar

Er litt usikker på all teorien rundt det spørsmålet ditt. Mener det står en del om det i Nutshell-boka, men den ligger på jobb...

 

Det jeg tror å huske og ha lest er at når du kaller constructor'n på en klasse (TMyObject.Create( ) ) så kalles også en del andre rutiner ting (delphi-magic...) Bl.a. NewInstance og InitInstance o.l. for å allokere minne og nullstille variabler osv. Når du kaller constructoren på et allerede instansiert object vil det ikke bli allokert en ny instans. Kaller du den på et uinitialisert objekt mener jeg det kræsjer..

 

Uansett skulle det forrundre meg om du noen gang har bruk for å kalle MyObject.create( ), og igjen så vil nok Nutshell boka gi svar på det meste ;-) Skal forsøke å huske på å sjekke den opp i morgen.

 

-Vegar

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...