c ++ - Hvad er faldgruberne med at have to dll'er dele et statisk bibliotek?

Indlæg af Hanne Mølgaard Plasc

Problem



Sig, du har to dlls


Dll A og Dll B


De begge forbinder statisk med et statisk bibliotek (dvs. en .lib-fil). Vi kalder det bibliotek L.


Jeg ved, at L fuldstændigt forbinder A og B hver for sig og effektivt skaber LA og LB. Men hvad sker der, når objekt O fra LA bliver overført fra A til B? Jeg antager, at i en LA-kode bliver henrettet, mens i B LB-kode bliver henrettet, fordi det er sådan, hvordan der skete forbindelse. Hvilke dårlige ting kan ske, hvis du opretter O i A, los A, og brug derefter O i B?

Bedste reference


Et statisk bibliotek er blot en samling af objektfiler. Når du linker til et statisk bibliotek, sker alt som om koden i det statiske bibliotek var blevet inkluderet i din.


Så hvis der er globale variabler i det statiske bibliotek, vil hver DLL få sin egen kopi, hvilket måske er det, du vil.

Andre referencer 1



  Men hvad sker der, når objekt O fra LA bliver overført fra A til B?



Det afhænger virkelig af hvilket objekt O er og hvad biblioteket L gør med det. Hvis O er et objekt, der udelukkende afhænger af tilstand, der er gemt inden for objektet, vil alt sikkert være fint. Men hvis O ikke er, hvis O afhænger af den globale tilstand eller tilstanden til et andet objekt eller noget, kan du have problemer.


Den bedste måde at undgå problemer på er at have ordentlige isolationslag mellem to DLL'er. Det vil sige, at du ikke skal passere O mellem de to overhovedet, da de ikke taler om det samme O. Generelt, hvis L er stort nok til at kræve, at du sender sine objekter mellem to brugere, så er det stort nok, at du sandsynligvis bør overveje dynamisk at forbinde det.