2013-08-29 4 views
5

ho la mia soluzione per la mia applicazione istituito nel seguente modo - (sto usando Visual Studio e questo è un VC progetto ++)exe ​​e dll condividere le stesse librerie statiche

App Library dependency diagram

NOTA: i progetti Blu sono compilati come librerie statiche.

come si può vedere, exe e dll condivide alcune delle librerie statiche (core.lib e utils.lib) e exe in-turn utilizza la DLL (tramite "load time dynamic linking" utilizzando la libreria di importazione).

la mia domanda è è una dipendenza corretta-installazione di avere? il problema che vedo è, quando questa applicazione è attiva e funzionante, ci sarà qualche codice duplicato nello spazio degli indirizzi del processo giusto? nel senso, tutte le funzioni che ci sono in Core.lib e Utils.lib appariranno due volte giusto? cos, Exe e DLL avranno questo codice compilato separatamente in loro.

in caso affermativo, un modo per risolvere il problema precedente è spostare il codice in esclusiva su dll o mantenere in exe e condividerlo (b/w exe e dll) tramite importazione/esportazione. ma ho molti oggetti di classe in core e utils e non mi piace l'idea di esportare/importare questi oggetti di classe (aggiungendo __declspec (dllimport/dllexport)) nei file di intestazione e inoltre potrei finire per aggiungere questo a molti dipendenti classe oggetti

questa è la mia comprensione e potrei sbagliarmi. si prega di suggerire correzioni e qual è il solito approccio seguito per affrontare tali problemi?

saluti,

+2

Ho avuto questo "problema" e ho deciso che, finché il codice duplicato era relativamente piccolo, questo era accettabile. Se il codice duplicato è sostanziale, allora dovresti raggrupparlo come una libreria condivisa, invece ... ma poi potresti correre all'inferno della dipendenza se "Algo-DLL" si aspetta una versione diversa della libreria di "App". –

risposta

0

Sì, il codice di base e programmi di utilità saranno duplicati. Invece di costruirle come librerie statiche, puoi costruirle come dll e usarle ovunque.

1

se vai DLL devi andare DLL tutto il tempo, tutte le dipendenze fino al c-runtime. la duplicazione del codice (impronta di memoria) non è il problema peggiore. ricorda che la memoria allocata dall'app non può essere liberata da una dll e viceversa, a meno che entrambi utilizzino lo stesso runtime (dll).

0

il mio suggerimento è: basta mantenere la codifica così com'è, fino a quando non si verifica un problema o si presenta un bisogno estremo di cambiamento.