hjælp til DLL

Tags:    delphi

<< < 12 > >>
Jeg er ved at lave et Yatzy spil, for at det skal blive lidt mer overskueligt, ønsker jeg at gemme diverse rutine procedurer' i en DLL fil, jeg har prøvet vha. af http://www.udvikleren.dk/article.php?aid=93&techid=2 ...

koden er som følger:
Fold kodeboks ind/udKode 


Dice er et array der defineres i min unit, place er en parameter der skal bruges - sendes fra unit'en... når jeg vil compile siger den en hel masse "undeclared identifiers... " 9 for at være hel præcis.. hvordan løses dette?




11 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Jeg er ved at lave et Yatzy spil, for at det skal blive lidt mer overskueligt, ønsker jeg at gemme diverse rutine procedurer' i en DLL fil, jeg har prøvet vha. af http://www.udvikleren.dk/article.php?aid=93&techid=2 ...

koden er som følger:
Fold kodeboks ind/udKode 


Dice er et array der defineres i min unit, place er en parameter der skal bruges - sendes fra unit'en... når jeg vil compile siger den en hel masse "undeclared identifiers... " 9 for at være hel præcis.. hvordan løses dette?


Det må være fordi at den ikke kender "Dice". Prøv at tilføje den unit hvor du har defineret "Dice" til uses i dll-filen og gør den til en "public" variabel i det originale program. Det kræver dog, at selve uniten og dll-projektet ligger det samme sted når du kompilerer dll-filen, ellers kan du vist skrive stien til uniten istedet.

Emil Melgaard
- Admin på gruppen Delphi spilprogrammering.
http://www.delphispilprogram.udvikleren.dk

[Redigeret d. 28/10-03 22:18:33 af Emil Melgaard]



Jeg er ved at lave et Yatzy spil, for at det skal blive lidt mer overskueligt, ønsker jeg at gemme diverse rutine procedurer' i en DLL fil, jeg har prøvet vha. af http://www.udvikleren.dk/article.php?aid=93&techid=2 ...


Hej,

Du skal betragte din EXE og DLL som 2 seperate projekter som ikke kender noget til hinanden.
Det vil sige at DLL'et kan ikke se nogle variabler i EXE'en med mindre du sender referencen til disse variabler med over (i et kald) til DLL'et.

Måden du kan løser dit problem er:
1. opret en funktion i DLL'et som returnere en Dice struktur.
2. Opret Dice arrayet i dit DLL.
3. Brug arrayet som returneres fra DLL'et i din EXE.

Jeg har prøvet at ændre i dit DLL og EXE så de bruger en strukture (array) i stedet for.
Jeg har ændret i koden direkte her på udvikleren så der kan være små fejl :-)
Men håber du kan få en idé om hvordan det skal gøres.

Her er koden:
Fold kodeboks ind/udKode 


Fold kodeboks ind/udKode 


HUSK at du kan ikke tage koden direkte vha Copy/Paste da noget af koden bliver oversat af udvikleren.dk når du læser forummet direkte. Du skal vælge at svare på dette indlæg og der efter Copy/Paste.

/Michael.

[Redigeret d. 29/10-03 08:57:09 af Michael Skovslund]

[Redigeret d. 29/10-03 09:03:50 af Michael Skovslund]




Her er koden til din DLL med lidt modificationer.
Fold kodeboks ind/udKode 


The-Freak

Livet er for kort til at kede sig.



Jeg er ved at lave et Yatzy spil, for at det skal blive lidt mer overskueligt, ønsker jeg at gemme diverse rutine procedurer' i en DLL fil, jeg har prøvet vha. af http://www.udvikleren.dk/article.php?aid=93&techid=2 ...

koden er som følger:
Fold kodeboks ind/udKode 


Dice er et array der defineres i min unit, place er en parameter der skal bruges - sendes fra unit'en... når jeg vil compile siger den en hel masse "undeclared identifiers... " 9 for at være hel præcis.. hvordan løses dette?


Det må være fordi at den ikke kender "Dice". Prøv at tilføje den unit hvor du har defineret "Dice" til uses i dll-filen og gør den til en "public" variabel i det originale program. Det kræver dog, at selve uniten og dll-projektet ligger det samme sted når du kompilerer dll-filen, ellers kan du vist skrive stien til uniten istedet.

Emil Melgaard
- Admin på gruppen Delphi spilprogrammering.
http://www.delphispilprogram.udvikleren.dk

[Redigeret d. 28/10-03 22:18:33 af Emil Melgaard]


Først, jeg har smidt koden til DLL'en og Unit'en ud:
Fold kodeboks ind/udKode 

Fold kodeboks ind/udKode 

Problemet er, at når jeg vil køre projektet (DLL og proj. ligger i samme mappe), så kommer den med en fejlbesked ""EAccessViolation" in module YatzyDLL.dll".... Hvorefter den udpeger DrawDice(i, i); i min unit ... hvad er problemet ?




[Redigeret d. 29/10-03 00:23:26 af Rasmus M. Jacobsen]




Her er koden til din DLL med lidt modificationer.
Fold kodeboks ind/udKode 


The-Freak

Livet er for kort til at kede sig.


http://indvikleren.dk/nopaste/index.php5?s=260 <- hvad er galt?`har gjort som der blev beskrevet ...





Her er koden til din DLL med lidt modificationer.
Fold kodeboks ind/udKode 


The-Freak

Livet er for kort til at kede sig.

http://indvikleren.dk/nopaste/index.php5?s=260 <- hvad er galt?`har gjort som der blev beskrevet ...


Ligemeget, jeg skulle adde "ExtCtrls" til uses ...


noget andet er, når jeg har rettet alle til Dices^[blabla]osv osv osv... så vil den godt compile, men kommer med EAccessViolation for derefter at pege på "Dices^[1].Dice := Dice1; hvad kan dette skyldes ?

[Redigeret d. 29/10-03 23:29:19 af Rasmus M. Jacobsen]




Her er koden til din DLL med lidt modificationer.
Fold kodeboks ind/udKode 


The-Freak

Livet er for kort til at kede sig.

http://indvikleren.dk/nopaste/index.php5?s=260 <- hvad er galt?`har gjort som der blev beskrevet ...


Ligemeget, jeg skulle adde "ExtCtrls" til uses ...


noget andet er, når jeg har rettet alle til Dices^[blabla]osv osv osv... så vil den godt compile, men kommer med EAccessViolation for derefter at pege på "Dices^[1].Dice := Dice1; hvad kan dette skyldes ?

[Redigeret d. 29/10-03 23:29:19 af Rasmus M. Jacobsen]


ingen forslag ?





Her er koden til din DLL med lidt modificationer.
Fold kodeboks ind/udKode 


The-Freak

Livet er for kort til at kede sig.

http://indvikleren.dk/nopaste/index.php5?s=260 <- hvad er galt?`har gjort som der blev beskrevet ...


Ligemeget, jeg skulle adde "ExtCtrls" til uses ...


noget andet er, når jeg har rettet alle til Dices^[blabla]osv osv osv... så vil den godt compile, men kommer med EAccessViolation for derefter at pege på "Dices^[1].Dice := Dice1; hvad kan dette skyldes ?

[Redigeret d. 29/10-03 23:29:19 af Rasmus M. Jacobsen]

ingen forslag ?


Jeg forstår ikke rigtigt hvad du har gjort, skal ^ ikke før Dices[1].Dice (^Dices[1].dice)?

Emil Melgaard
- Admin på gruppen Delphi spilprogrammering.
http://www.delphispilprogram.udvikleren.dk




Ligemeget, jeg skulle adde "ExtCtrls" til uses ...


noget andet er, når jeg har rettet alle til Dices^[blabla]osv osv osv... så vil den godt compile, men kommer med EAccessViolation for derefter at pege på "Dices^[1].Dice := Dice1; hvad kan dette skyldes ?


Har du husket at kalde "InitDices(Dices);" i din FormCreate??
Ellers så prøve at debugge din kode for at se om pointeren peger det rigtige sted hen.


Jeg forstår ikke rigtigt hvad du har gjort, skal ^ ikke før Dices[1].Dice (^Dices[1].dice)?

Emil Melgaard
- Admin på gruppen Delphi spilprogrammering.
http://www.delphispilprogram.udvikleren.dk


Da ^ er den måde du dereferere en pointer på skal den altid stå efter pointer variabel nanvnet.
Altså, hvis du skal tilgå indholdet af en pointer (det som den peger på) skal du bruge: prt_var^
Hvis du skal tilgå pointer værdien (adressen) skal du undlade ^.


/Michael.




Ligemeget, jeg skulle adde "ExtCtrls" til uses ...


noget andet er, når jeg har rettet alle til Dices^[blabla]osv osv osv... så vil den godt compile, men kommer med EAccessViolation for derefter at pege på "Dices^[1].Dice := Dice1; hvad kan dette skyldes ?


Har du husket at kalde "InitDices(Dices);" i din FormCreate??
Ellers så prøve at debugge din kode for at se om pointeren peger det rigtige sted hen.


Jeg forstår ikke rigtigt hvad du har gjort, skal ^ ikke før Dices[1].Dice (^Dices[1].dice)?

Emil Melgaard
- Admin på gruppen Delphi spilprogrammering.
http://www.delphispilprogram.udvikleren.dk

Da ^ er den måde du dereferere en pointer på skal den altid stå efter pointer variabel nanvnet.
Altså, hvis du skal tilgå indholdet af en pointer (det som den peger på) skal du bruge: prt_var^
Hvis du skal tilgå pointer værdien (adressen) skal du undlade ^.


/Michael.


Jeg er ked af det, men jeres hjælp har ikke ført til succes :|

Kan i evt. komme med mere konkrete eksempler ... ?

på forhånd tak




<< < 12 > >>
t