|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
c++: creare una dll
ciao a tutti!
vorrei riuscire a creare una dll, riesco gia' a creare librerie dinamiche, c'e' molta differenza? ciao ciao e grazid
__________________
MyPC: A7A266 - Thoro1800+@2000+ - SK6 - 512DDR - FX5200 128MB - SBLive!1024 - MAXTOR120GB - Liteon LTR52327S LDW-451S HTPC: Case uATX QTec - GA 7VM400M - Duron1600 - ALX800 - 256DDR - Radeon7000 - LiteOn166 - Pow by GeexBox 0.98.5 Utenti con cui ho trattato |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
Una libreria dinamica è una dll non c'è differenza, quindi sei a posto già ci sei riuscito. |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
Quote:
ciao e grazie
__________________
MyPC: A7A266 - Thoro1800+@2000+ - SK6 - 512DDR - FX5200 128MB - SBLive!1024 - MAXTOR120GB - Liteon LTR52327S LDW-451S HTPC: Case uATX QTec - GA 7VM400M - Duron1600 - ALX800 - 256DDR - Radeon7000 - LiteOn166 - Pow by GeexBox 0.98.5 Utenti con cui ho trattato |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
se usi il compilatore vc6 o NET crea un progetto per una dll NON MFC nelle opzioni del compilatore di default avrai che compilando il progetto ti creerà per esmpio tua.dll e tua.lib se usi. Usando queste opzioni devi portare nella dir dell'exe la dll e la lib che hai creato. avrai anche tua.cpp e tua.h Se hai fatto questa scelta sopra, nel progetto devi mettere anche un file che si chiama per esmpio tua.def lo crei con il notepad e lometti nel progetto. Nel file.def ci devi scrivere questo: LIBRARY tua EXPORTS perchè stai usando una dll dinamca e la sua lib quindi in questo caso la dll deve sapere le funzioni che esporterai. se nelle opzioni del compilatore scegli l'opzione Static Library allora non ti serve + avere il file.def perchè il tutto è compreso nell'unico file che ti verrà creato che si chiama tua.lib infatti avrà dimensioni maggiori. Dunque se opti per la dll + la lib nel file.def (che sarebbe tua.def che hai creato) devi mettere la funzione da esportare. esempio: LIBRARY tua EXPORTS Inizializzazione ora nel file tua.h immetti la funzione da esportare che è: extern "C" void __declspec (dllexport) Inizializzazione(); magari ti fai ritornare un true o false con questa: extern "C" bool __declspec (dllexport) RitornaFlag(); Nel file .cpp ci metti le funzioni così: Inizializzazione() { ...fai l'inizializzazione } bool RitornaFlag() { return false; } Nel progetto dell'exe che richiama la dll e la lib oppure (come sopra) solo la lib perchè hai scelto la Static Library, in un file.h globale o nel cpp pricipale (il main) metti le stesse righe delle funzioni da esportare ovvero i prototipi. esempio ci incolli le stesse righe così: extern "C" void __declspec (dllexport) Inizializzazione(); extern "C" bool __declspec (dllexport) RitornaFlag(); Nel progetto che richiama la dll + la lib o solo la lib, nelle opzioni del compilatore devi includere tua.lib (se non funziona nulla) e come detto prima tua.lib e tua.dell o solo tua.lib deve stare nella dir del progetto dell'exe. dal mai del progetto per richiamare la funzione basta che metti la sua chiamata: esempio: Inizializzazione(); oppure if(RitornaFlag())//valore del flag di stato a=2; else a=3: |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
ciao.
uso CodeBlocks col compilatore "Microsoft Visual C++ Toolkit 2003". Se gli dico di creare una libreria dinamica crea solo la dll e non la lib.
__________________
MyPC: A7A266 - Thoro1800+@2000+ - SK6 - 512DDR - FX5200 128MB - SBLive!1024 - MAXTOR120GB - Liteon LTR52327S LDW-451S HTPC: Case uATX QTec - GA 7VM400M - Duron1600 - ALX800 - 256DDR - Radeon7000 - LiteOn166 - Pow by GeexBox 0.98.5 Utenti con cui ho trattato |
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
evidentemente o non esporti nessun simbolo oppure l'IDE non passa le opzioni giuste al compilatore; proverò a fare una ricerca per vedere come si chiamava l'opzione da dare ai compilatori Microsoft per generare il .lib...
|
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
boh, non la trovo: ho provato da Visual C++ 6 a creare una DLL selezionando l'opzione "Doesn't produce LIB", e il lib non me lo produce, ma nella command line non cambia nulla... ma hai esportato qualche simbolo dalla tua DLL?
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Con il Visual C++ (penso tutte le versioni, sicuramente almeno le ultime), per generare una import library si usa l'opzione /IMPLIB:nomelib da passare al linker. Questa opzione comunque si può specificare nelle proprietà del progetto nella sezione Linker/Avanzate (per i VC++ che hanno l'IDE, naturalmente).
Nella documentazione dell'opzione /IMPLIB c'è però una nota interessante: L'opzione /IMPLIB consente di eseguire l'override del nome predefinito per la libreria di importazione creata in LINK durante la generazione di un programma contenente esportazioni. Il nome predefinito è composto dal nome di base del file di output principale e dall'estensione LIB. Un programma contiene esportazioni se è specificato uno dei seguenti elementi:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
Ora te lo dico io: 1. menu project/proprietà e ti si apre la finestre delle opzioni di progetto 2. In Configuration propiertes/General clicca su Configuration Type e scegli: Dynamic Library (.dll) 3. poi C/C++/Code Generation clicca su Runtime Library e scegli: Multi-threaded Debug (/MTd) 4. In Linker/General clicca su Output File e incolla questo: se in release... .\Release/Tua.dll se in debug... .\Debug/Tua.dll 5. in Input/Module Definition File metti: .\Tuo.def Segui le istruzioni del mio post precedente e fai questi passaggi nelle opzioni. ciao e facci sapere Edit: CodeBlocks non lo conosco e non l'ho mai usato con vs7 2003 net ciao Ultima modifica di okay : 29-12-2005 alle 16:05. |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
grazie a tutti!
domani provo e vi faccio sapere ciao ciao e buona notte
__________________
MyPC: A7A266 - Thoro1800+@2000+ - SK6 - 512DDR - FX5200 128MB - SBLive!1024 - MAXTOR120GB - Liteon LTR52327S LDW-451S HTPC: Case uATX QTec - GA 7VM400M - Duron1600 - ALX800 - 256DDR - Radeon7000 - LiteOn166 - Pow by GeexBox 0.98.5 Utenti con cui ho trattato |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:47.



















