PDA

Visualizza la versione completa : [c++]dll e include


giuseppe500
05-04-2013, 17:56
ciao.
Sto procedendo con un progetto che usa qt e opengl e sto cercando di utilizzare delle dll separate ognuna che svolge dei macroproblemi.
per semplificare prendiamo proprio queste due dll : Mygraphics.dll e Myqt.dll in cui ho inserito codice relativo alle due categorie.

per farla breve:
Ho pensato di gestire la cosa creando e condividendo tra le due librerie delle classi genitori , astratte ma alla base dela gerarchia.

ma non so se giusto e ve lo chiedo .

e questo succede semppre quando una funzione che fa dela grafica opengl e sta in mygraphics.dll usata dal widget qt ad es ma ci sono mille esempi di questo.

adesso condivido i .h tra piu dll!?
ho tutto ben organizzato nel file system , solo che a volte devo fare cose del tipo:
MyGraphics.h in Mygraphics.dll
#include "../myqt/widgetqt.h

sbagliato?
o le dll non dovrebbero collaborare tra loro tramite i .h?


sto ripensando al metodo che mi ha consigliato shodan di avere dll che sono codice,e che espongono gli oggetti tramite delle factory(non so se ho capito bene shodan il tuo metodo)
ma in questo caso utilizzando quel metodo il problema ci sarebbe lo stesso?

non un problema per cui non riesco a lavorare, se includo i .h come detto sopra funziona, un problema per cui non riesco a lavorare bene(.h sparsi e condivisi tra piu dll sono un poccio penso, o almeno cosi mi sembra) e per questo ve lo chiedo.

grazie.

shodan
05-04-2013, 18:39
Non te la prendere, ma mica ho capito che problema hai.

giuseppe500
05-04-2013, 19:13
scusa shodan.
Ho un progetto diviso in piu dll.
Mi chiedevo se corretto che in una dll che usa un altra dll si possano creare degli include incrociati:
1)dll 1 usa file do.h di dll 2
2)dll2 usa file works.h di dll 1 ecc....

ma forse mi sono spiegato ancora male:

ho varie cartelle per ogni dll che un progetto di vs 2010 (con i file .cpp e .h che formano la dll) e in un progetto dll devo accedere ad un altra cartella di un altra dll per pescare gli header e utilizzare le funzioni di quell a altra dll.

alla fine se continuo cosi si crea un casino mai visto.

volevo chiederti se c' una soluzione a questo o se ci sono delle regole standard da seguire per non creare il casino.

ciao.
grazie.

shodan
05-04-2013, 20:18
Ok. Beh, no: non ci sono regole standard. Del resto se Dll1 ha bisogno di accedere a dati di Dll2, in Dll1 devi per forza includere Dll2.h
Puoi per isolare al massimo la dipendenza includendo Dll2.h non in Dll1.h, ma nei vari .cpp (e solo dove ti serve) di Dll1.

Un modo abbastanza comune di procedere di creare dei .h pubblici e dei .h privati.
Es.
Dll1impl.h include Dll1.h. Dll2impl.h include Dll2.h, Dll1impl.h include Dll2impl.h.
Questo fa si di avere solo le astrazioni in Dll1.h e Dll2.h, permettendo tutti i vari incroci sottobanco.
Questo a livello di sorgenti.

Se invece devi usare Dll2.dll per creare Dll1.dll, devi includere dll2.h nei vari .cpp che ne abbisognano. Non che hai molta scelta: se l'include file in una determinata cartella, li devi andarlo a prendere.

giuseppe500
05-04-2013, 20:45
grazie 1000 shodan.
Il casino nella mia testa nasce dal fatto che ho visto un progetto opensource che lavora cosi:

1)si definiscono le dipendenze dei progetti nella soluzione : prog1 ha bisogno di prog2 ecc.. in modo che tutto sia compilato con un filo logico
2)Ogni progetto all' evento di postbuild copia tutti i suoi .h in una cartella comune a tutti i progetti : sdk\include
3)i progetti vanno a prendersi i .h da questa cartella che inclusa nelle propriet include di ogni progetto.

puo essere un buon metodo ?

il metodo dei .h publici e privati non lo conoscevo grazie.
ciao. :ciauz:

Loading