DLL filer og borlndmm.dll

Tags:    delphi

Jeg har et program der består af exe'filen samt en DLL fil.
Hvordan undgår jeg at skulle inkludere borlndmm.dll filen?



10 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Jeg mener kun du skal bekymre dig om "borlndmm.dll" filen når du anvender Delphi's definerede strings. Hvis du i stedet benytter dig af PChar skulle der helst ikke være nogen problemer!


Ja, det burde være sådan men der er lige en lille sidenote som IKKE er nævnt ret mange steder. Dit program og DLL'en har nemlig hver deres heap. Hvis du så prøver at free'e en PChar som DLL'en har opretter, fra dit program så vil du få Access Violation hvis du ikke bruger ShareMem(Borlndmm.dll). Dette er også grunden til at API kaldene i Windows aldrig opretter PChar's men istedet for programmet til at oprette en PChar med en længde som man så giver videre til Windows funktionen. På den måde skal Windows funktionen ikke pille ved heapen.

Så faktisk er kommentaren lidt misledende!

MH.

The-Freak

Livet er for kort til at kede sig.



Det siger vel egentligt sig selv, at hvis du fjerner det data som en pointer peger på (I dette tilfælde en PChar), skal pointeren assignes til nil (NULL). Sådan er det med alle pointers, i alle sprog! Så jeg syntes ikke at den kommentar er misvisende. Nu er det vel også sjældent at man frigiver en streng fra hukommelsen! Når jeg bruger PChar i en DLL forbindelse bruger jeg oftets const (konstanter), for at sikre mig at det ikke kan ske! Jeg har aldrig haft problemer med at bruge PChar's i DLL'er!



Jeg har et program der består af exe'filen samt en DLL fil.
Hvordan undgår jeg at skulle inkludere borlndmm.dll filen?


Det står faktisk i den note som bliver oprettet når du opretter en DLL ;). Ellers søg på Google efter FastShareMem.pas ! Så tilføjer du bare FastShareMem til uses istedet for ShareMem (Dette kræver at du ligger FastShareMem.pas et sted hvor Delphi kan finde den, eller fortæller Delphi hvor den er !)

MH.

The-Freak

Livet er for kort til at kede sig.



Jeg har et program der består af exe'filen samt en DLL fil.
Hvordan undgår jeg at skulle inkludere borlndmm.dll filen?


Det står faktisk i den note som bliver oprettet når du opretter en DLL ;). Ellers søg på Google efter FastShareMem.pas ! Så tilføjer du bare FastShareMem til uses istedet for ShareMem (Dette kræver at du ligger FastShareMem.pas et sted hvor Delphi kan finde den, eller fortæller Delphi hvor den er !)

MH.

The-Freak

Livet er for kort til at kede sig.


synes ikke rigtig det hjælper.. har tilføjet den til både min dll DPR fil og min exe DPR fil, men det hjælper ikke.




Hvad sker der når du ikke bruger (Fast)ShareMem ?

MH.

The-Freak

Livet er for kort til at kede sig.



Jeg mener kun du skal bekymre dig om "borlndmm.dll" filen når du anvender Delphi's definerede strings. Hvis du i stedet benytter dig af PChar skulle der helst ikke være nogen problemer!




ok hør lige her. Jeg bruger ingen strings kun PChar i min dll. Men selvom jeg bruger FastMemShare istedet for ShareMem så beder den stadig om borlndmm.dll filen.
Hvad har jeg gjort galt?
FastShareMem er sat ind i som det første i uses i både min dll og exe drp fil.



Hvis du ikke bruger strings, hvorfor bruger du så FastMemShare eller ShareMem overhovedet? Har du prøvet at kompile uden de to headers?



ja har jeg også prøvet, men den vil stadig have den dll fil :S



Hmm jeg tror at jeg bliver nødt til at koden, for at hitte ud af det!



t