c + + - Global pointer i DLL

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et C ++ DLL-projekt, der indeholder en dllmain-kildefil, en overskrift med kun DLL-funktionserklæringerne og en cpp-fil, som indeholder de fuldstændige funktionsdefinitioner og en global pointer til en forekomst af en anden klasse. Denne peger initialiseres med et opkald til en Init-funktion, og resten af ​​DLL-funktionerne bruger pegeren og returnerer en fejl, hvis den ikke er blevet tildelt.


Bortset fra at bruge brugeren til at kalde en bestemt funktion, når de er færdige med DLL'en (hvilket lyder som en forfærdelig ide), hvordan kan jeg sikre mig, at den globale peger i cpp-filen er allokeret?


Tak.

Bedste reference


Når DLL'en lukkes, bliver der et opkald til DllMain med en parameter på DLL\_PROCESS\_DETACH; du kan sætte kode for at frigøre din globale der. [8]

Andre referencer 1



  Bortset fra at bruge brugeren til at kalde en bestemt funktion, når de er færdige med DLL'en (som lyder som en forfærdelig ide)



I betragtning af at du allerede har en Init funktion, har en matchende Free funktion mening.


Hvordan ellers ville du vide, hvornår brugeren er færdig med biblioteket? Du kan vente, indtil DLL'en er losset (se DllMain), men på den tid slutter processen alligevel.


Jeg formoder, at den bedste løsning ville være at undgå den globale pointer helt. Lav en klasse, der indeholder forekomsten af ​​den anden klasse og dine metoder, og få brugeren til at oprette en forekomst selv (konstruktøren erstatter din Init og destructoren erstatter din Free).